Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Panel logowania sesje, bezpieczeństwo sesji itp.
marcus753
post 8.06.2009, 12:09:18
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam jestem początkującym programistą php i powoli zaczynam planować Panel logowania zależy mi aby był dość bezpieczny dlatego zastanawiam się słyszałem że trzymanie danych w sesjach jest dość niebezpieczne i grozi włamaniem na strone dlatego zastanawiam sie czy jest inny sposób albo jak zabezpieczyć sesje tak aby można w nich było trzymać poufne dane

pozdrawiam i z niecierpliwością czekam na odpowiedź
za pomoc z góry dziękuje


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
erix
post 8.06.2009, 12:27:09
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Znowu...?

A użyłeś chociaż raz wyszukiwarki?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
marcus753
post 8.06.2009, 12:43:36
Post #3





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


tak szukałem informacji na temat paneli logowania i sesji ale znalazłem tylko jakieś bzdety albo gotowe panele...
moja znajomość techniczna pozwala mi na zrobienie panelu logowania ale zastanawiam się co umieścić w sesjach ?
na samym początku miałem taki pomysł w pliku index.php wpisujemy hasło i login w pliku logowanie.php sprawdzamy czy login jest w bazie i czy hasło sie zgadza jeśli tak to do sesji przypisujemy wartość np. 5 i przechodzimy do pliku zabezpieczone.php tutaj sprawdzamy wartość sesji jeśli to 5 to wyświetlamy strone ale z tego co przeczytałem w google taki sposób chyba nie jest bezpieczny i zastanawiam się nad alternatywą kombinuje już pare dni nad tym i powoli zaczynam się poddawać ;/ sciana.gif


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
Kshyhoo
post 8.06.2009, 12:47:35
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Ja poznawałem sesje na tym artykule. A bezpieczeństwo zależy, jak z tego skorzystasz...


--------------------
Go to the top of the page
+Quote Post
marcio
post 8.06.2009, 12:48:44
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(marcus753 @ 8.06.2009, 13:43:36 ) *
tak szukałem informacji na temat paneli logowania i sesji ale znalazłem tylko jakieś bzdety albo gotowe panele...
moja znajomość techniczna pozwala mi na zrobienie panelu logowania ale zastanawiam się co umieścić w sesjach ?
na samym początku miałem taki pomysł w pliku index.php wpisujemy hasło i login w pliku logowanie.php sprawdzamy czy login jest w bazie i czy hasło sie zgadza jeśli tak to do sesji przypisujemy wartość np. 5 i przechodzimy do pliku zabezpieczone.php tutaj sprawdzamy wartość sesji jeśli to 5 to wyświetlamy strone ale z tego co przeczytałem w google taki sposób chyba nie jest bezpieczny i zastanawiam się nad alternatywą kombinuje już pare dni nad tym i powoli zaczynam się poddawać ;/ sciana.gif

Co ty za glupoty piszesz znalazles tylko jakies bzdety albo gotowe panele a co innego chcialbys znalesc jak szukac nie potrafisz:
http://forum.php.pl/index.php?act=Search&a...te=%2Blogowanie

Masz ponad 50 stron tematow bys tak ruszyl dupe poszukal pokazal co wykodziles powiedzial w czym masz dylemat to bysmy ci pomogli jest chyba 10 tematow dziennie na temat sesji,logowania,rejestracji i powoli sie to robi monotonne i nudne.

Takze wez poszukaj i nie pisz glupot tam masz wszystko opisane razem z zabezpieczeniami jest zreszta pelno klas ktora widnieja na lamach strony ostatnio nawet ja jedna podawalem by zobaczyc czy jest good.

Ten post edytował marcio 8.06.2009, 12:49:22


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Maveral
post 8.06.2009, 12:58:19
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 8
Dołączył: 30.07.2005

Ostrzeżenie: (0%)
-----


Jeśli chodzi o logowanie, to wystarczą w zasadzie takie standardowe zabezpieczenia, które znajdziesz w skryptach na tym forum. W tej kwestii nie wymyślisz już niczego, czego nie było wcześniej, więc szukaj w odpowiednich tematach smile.gif
Go to the top of the page
+Quote Post
marcus753
post 8.06.2009, 13:18:50
Post #7





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


dzięki panowie strona podana przez Kshyhoo rozjaśniła troche moją znajomość sesji mam jeszcze takie małe pytanie rozumiem że jest możliwość zobaczenia zawartości sesji natomiast dlatego nie powinno się tak umieszczać haseł itp. ale czy jest możliwość zmiany wartości sesji z zewnątrz ?


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
marcio
post 8.06.2009, 13:23:36
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nom bawiac sie chodzby livehhtpheaders da rade sa tez inne sniffery/spoofery napewno.

Co do tego arta to go nawet nie czytaj spojrz na date 2002 rok uzywane php4 i teraz sesje inaczej dzialala sa bezpieczniejsze mozesz co najzyjwej poczytac z czym to sie je i tyle.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
marcus753
post 8.06.2009, 13:44:38
Post #9





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


no to zabieram się za analizowanie informacji na tym forum może coś znajde eh ;/


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
marcio
post 8.06.2009, 13:49:20
Post #10





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat(marcus753 @ 8.06.2009, 14:44:38 ) *
no to zabieram się za analizowanie informacji na tym forum może coś znajde eh ;/

Widac jakie masz checi nie ma to jak ktos daje gotowe na tacy prawda??

Niestety programowanie to takie hobby gdzie trzeba radzic sobie samemu jakos przynajmniej w dostatecznym stopniu i ruszac czesto makuwa tez trzeba.

Ogolnie jest to najwieksze forum o php w PL takze wiesz.....

Ten post edytował marcio 8.06.2009, 13:49:49


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
marcus753
post 8.06.2009, 13:56:51
Post #11





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


ja dopiero ucze się o php widziałem posty gdzie ludzie poprostu pytali sie o jakiś kurs na temat sesji (na tym forum) i dostawali strony z kursami (gotowe na tacy) a ja pytając się o jakieś metody zabezpieczenia sesji czy też projektowania panelu logowania tak aby w sesjach nie były umieszczane kluczowe dane dostaje po głowie że mi się nie chce szukać chyba napisze skrypt tak jak myślałem wcześniej i się zapytam o metody zabezpieczenia go może wtedy ktoś mi pomoże...


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
marcio
post 8.06.2009, 14:22:22
Post #12





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
a ja pytając się o jakieś metody zabezpieczenia sesji czy też projektowania panelu logowania tak aby w sesjach nie były umieszczane kluczowe dane dostaje po głowie że mi się nie chce szukać chyba napisze skrypt tak jak myślałem wcześniej i się zapytam o metody zabezpieczenia go może wtedy ktoś mi pomoże...

Na to samo wychodzi w tych kursach zreszta sa opisane podstawowe zabezpieczenia to raz.

A dwa jak napiszesz to chetnie pomoge.

Trzy jak przy 60 stronach na temat logowania znalazles tylko linki do kursow to gratuluje......


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
marcus753
post 8.06.2009, 16:28:33
Post #13





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


marcio prosze bardzo trzymam za słowo że teraz mi pomożesz winksmiley.jpg

strona.html
  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  4.  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  7.    
  8.    <head>
  9.  
  10.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  11. <title>strona.php</title>
  12.    
  13.    </head>
  14.  
  15.    <body>
  16.  
  17.  
  18.    <form action="logowanie.php" method="POST">
  19.    
  20.    Login: <input name="login" /><br>
  21.    Hasło: <input name="haslo" /><br>
  22.    
  23.    <input type="submit" value="wyślij" />
  24.    
  25.    </form>
  26.  
  27.  
  28.    </body>
  29. </html>


logowanie.php
  1. <?php
  2.  
  3. $polaczenie = @mysql_connect('localhost', 'uzytkownik', 'haslo')
  4. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  5. echo "Udało się połączyć z serwerem!<br />";
  6.  
  7. $baza = @mysql_select_db('gebala_uzytkownicy', $polaczenie)
  8.  
  9. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  10.  
  11. echo "Udało się połączyć z bazą dancych!";
  12.  
  13. $zapytanie='SELECT login,haslo FROM uzytkownicy';
  14. $wynik= mysql_query($zapytanie,$polaczenie);    
  15.    
  16.    
  17. while ($rekord = mysql_fetch_assoc($wynik)){
  18.  
  19.    $login1 = $rekord['login'];
  20.    $haslo1 = $rekord['haslo'];
  21.    $login2 = $_POST['login'];
  22.    $haslo2 = $_POST['haslo'];
  23.  
  24.  
  25.    if (($login1 === $login2) AND ($haslo1 === $haslo2)){
  26.  
  27.    $_SESSION['user'] ="zalogowany";}}
  28.  
  29.  
  30.  
  31. mysql_close($polaczenie);
  32.  
  33. echo"<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=zabezpieczona.php\">";
  34. ?>


zabezpieczona.php

  1. <?php
  2. ?>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
  4.  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  7.    
  8.    <head>
  9.  
  10.    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  11. <title></title>
  12.    
  13.    </head>
  14.  
  15.    <body>
  16.  
  17.    
  18.    <?php
  19. if     (($_SESSION['user']) === "zalogowany"){
  20.    echo"jesteś zalogowany !";
  21. }
  22.    else{
  23. echo"nie autoryzowany dostęp !";
  24. }
  25. ?>
  26.  
  27.  
  28.  
  29.    </body>
  30. </html>


Prosty skrypt logowania jak zrobić aby był bezpieczniejszy ? w tym przypadku jeśli ktoś zdoła zmienić wartość sesji user na zalogowany ma praktycznie nie ograniczony dostęp do "ukrytej" części strony...


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
marcio
post 8.06.2009, 16:47:06
Post #14





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


To zamien na:
  1. <?php
  2. $zapytanie='SELECT login,haslo FROM uzytkownicy';
  3. $wynik= mysql_query($zapytanie,$polaczenie);    
  4.    
  5.    
  6. while ($rekord = mysql_fetch_assoc($wynik)){
  7.  
  8.    $login1 = $rekord['login'];
  9.    $haslo1 = $rekord['haslo'];
  10.    $login2 = $_POST['login'];
  11.    $haslo2 = $_POST['haslo'];
  12.  
  13.  
  14.    if (($login1 === $login2) AND ($haslo1 === $haslo2)){
  15.  
  16.    $_SESSION['user'] ="zalogowany";}}
  17. ?>

Na to:
  1. <?php
  2. $zapytanie='SELECT login,haslo FROM uzytkownicy where login = "'.mysql_real_escape_string($_POST['login']).'" limit 1';
  3. $wynik= mysql_query($zapytanie,$polaczenie);    
  4. $tab = mysql_fetch_assoc($wynik);
  5.  
  6.  
  7.    if(($_POST['login'] === $tab['login']) && ($_POST['haslo'] === $tab['haslo'])) $_SESSION['user'] ="zalogowany";
  8.  
  9.  else echo('Podano zle dane<Br>');
  10. ?>

Bo byla zbedna petla while() i do tego glupio dane sprawdzales.

Potem w sesji nigdy nie trzymaj poufnych danych jak haslo np.
Haslo w bazie trzymaj zakodowane za pomoca md5()/sha1() polecam to drugie i przy porownywaniu dajesz:
  1. <?php
  2. if(($_POST['login'] === $tab['login']) && (md5($_POST['haslo']) === $tab['haslo'])) $_SESSION['user'] ="zalogowany";
  3. ?>

A haslo w bazie danych jest zakodowane za pomoca md5().

Potem dawaj sobie zawsze sesje za jakims unikalnym kodem dla kazdego user'a u sprawdzaj czy kod z sesji zgadza sie z tym od user'a wtedy nawet jak bedzie chcial kombinowac z sesja to nic nie zdziala bo bedzie musial podac kod uzytkownika ktory jest losowy np taki:
  1. <?php
  2. $code = substr(md5(time()), 10, 20);
  3. ?>

I przy dodawaniu user'a do kulumny code wsadzasz wygenerowany ciag a przy logowaniu tworzysz dodatkowa sesje z tym ciagiem ktory wyciagniesz z bazy.

A na stronie zabezpieczona.php robisz taK:
  1. <?php
  2. $zap = mysql_query('SELECT code FROM uzytkownicy where code = "'.mysql_real_escape_string($_SESSION['sesja_z_kodem']).'"');
  3.  
  4. if(mysql_num_rows($zap) > 0 && $_SESSION['user'] == 'zalogowany') {
  5.  
  6. //zalogowany
  7.  
  8. }
  9.  
  10. else echo('Cos jest zle tongue.gif');
  11. ?>


Cytat
Prosty skrypt logowania jak zrobić aby był bezpieczniejszy ? w tym przypadku jeśli ktoś zdoła zmienić wartość sesji user na zalogowany ma praktycznie nie ograniczony dostęp do "ukrytej" części strony...

Jak zrobisz tak jak ci powiedzialem to bez sql inj. chyba ze ty mu podasz code user'a nic nie zdziala.

Oczywiscie poczytaj jeszcze od session fixation,hijacker etc ale mysle ze to zbedne bawienie sie sprawdzac ip,agent'a i referer'a

Ten post edytował marcio 8.06.2009, 16:49:19


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
marcus753
post 8.06.2009, 17:40:00
Post #15





Grupa: Zarejestrowani
Postów: 281
Pomógł: 3
Dołączył: 8.06.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


rozumiem że chciałeś abym ja sam trochę się pomęczył niż dostał gotowe rozwiązanie na tacy ale czy nie można było tak od razu ? winksmiley.jpg
Oczywiście wielkie dzięki za pomoc i poświęcony czas

Studiuję ten twój kod i zastanawiam się nad nim on jest automatycznie generowany podczas rejestracji użytkownika i zapisywany do bazy czy podczas logowania użytkownika ?
i rozumiem że po udanym zalogowaniu wczytujemy ten kod do zmiennej i potem już na zabezpieczonej stronie go porównujemy czy się zgadza z tym w bazie dobrze rozumiem ?
a jeżeli tak to czy nie ma możliwości zobaczenia, przechwycenia go gdy znajduje się w sesji ? hmm


--------------------
Cokolwiek zostanie upuszczone na uklad elektroniczny, spadnie zawsze tam gdzie wyrzadzi najwiecej szkody.
Go to the top of the page
+Quote Post
marcio
post 8.06.2009, 17:48:34
Post #16





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Studiuję ten twój kod i zastanawiam się nad nim on jest automatycznie generowany podczas rejestracji użytkownika i zapisywany do bazy czy podczas logowania użytkownika ?
i rozumiem że po udanym zalogowaniu wczytujemy ten kod do zmiennej i potem już na zabezpieczonej stronie go porównujemy czy się zgadza z tym w bazie dobrze rozumiem ?
a jeżeli tak to czy nie ma możliwości zobaczenia, przechwycenia go gdy znajduje się w sesji ? hmm

Ja to robie 1 przy rejestracji poniewaz nie mam danych z pentagonu na stronie jednak jesli chcesz miec wieksze bezpieczenstwo to dodaj pierwwszy kod user'owi podczac rejestracji a przy kazdym logowaniu jesli dane sie zgadzaja robisz update z nowym kodem.

Po zalogowaniu kod wczytujesz do sesji kodujac go np glupim rot13 wtedy gdy ktos znajdzie nawet xss'a na twojej stronie moze sie nie domysli ze kod dodatkowo jest kodowany za pomoca rot13 rozumiesz a jak nie to trzymaj w jawnej postaci tylko staraj sie nie miec xss/csrf na stronie i wtedy bedzie good.
POtem kod z sesji porownujesz z tym w bazie.

Mozliwosc przechwycenia ma ale jesli zmieniasz kod user'a za kazdym logowaniem to h4xor bedzie sie cieszyl sesja do wylogowania i poten lipa do tego jesli masz mozliwsco zmiany hasla dla zalogowanego user'a to przez zmiana hasla pytaj o stare wtedy napastnik naprawde nic nie zdziala, nom prawie nic tongue.gif.

Jesli bedziesz robil to raz przy rejestracji wtedy jesli uzyska kod user'a to jest lipa tongue.gif.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
bełdzio
post 8.06.2009, 20:04:13
Post #17





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


http://www.beldzio.com/bezpieczenstwo-mechanizmu-sesji


--------------------
Go to the top of the page
+Quote Post
zientek18
post 1.07.2009, 15:45:02
Post #18





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 8.01.2006

Ostrzeżenie: (0%)
-----


Bardzo ciekawy temat, przeczytałem wszystko.
Pozwolę się dołączyć do tematu.
Właśnie próbuję stworzyć przycisk wylogowania i zrobiłem to tak:

dodatkowa linijka w pliku zabezpieczony.php :

  1. <?php
  2. echo '<a href="wyloguj.php">wyloguj</a>';
  3. ?>


cala zawartosc pliku wyloguj.php:

  1. <?php
  2. if ($_SESSION['user'] == "zalogowany") {
  3. }
  4. echo 'wylogowales sie';
  5. ?>


Niestety nie działa, wyświetla się napis, że zostałeś wylogowany, ale niestety po wejściu w plik zabezpieczony.php wszystko jest widoczne.

Czy ktoś może mnie nakierować ?
Go to the top of the page
+Quote Post
Robert007
post 1.07.2009, 16:20:00
Post #19





Grupa: Zarejestrowani
Postów: 167
Pomógł: 2
Dołączył: 1.07.2009
Skąd: Poznań

Ostrzeżenie: (0%)
-----


sprawdź czy warunek na wylogowanie jest dobry czyli musisz wrzucić echo pod warunkiem a jak się nie wyświetli nick to znaczy że warunek masz źle winksmiley.jpg
Go to the top of the page
+Quote Post
bełdzio
post 1.07.2009, 16:41:55
Post #20





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


try
  1. <?php
  2. $_SESSION = array( );
  3. setcookie ( session_name(), '', time( ) - 3600 );
  4. ?>


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:03