Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z wylogowaniem
arzach
post 15.06.2010, 18:23:22
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Witam napisałem prosty skrypt logowania i mam problem z wylogowaniem. Mimo że podczas wylogowania $_COOKIE['user'] jest usuwane to dalej istnieje. I nie można się wylogować.
Plik logowanie
  1. if (isset($_COOKIE['user']))
  2. {
  3. $result = mysql_query("SELECT * FROM uzytkownicy WHERE id='".$_COOKIE['user']."' LIMIT 1");
  4. if (mysql_num_rows($result)) {
  5. $userdata = mysql_fetch_assoc($result);
  6. }
  7. }
  8.  
  9.  
  10. if(isset($_POST['iduzytkownika']) && isset($_POST['haslo']))
  11. {
  12.  
  13. $user_name = $_POST['iduzytkownika'];
  14. $user_pass = $_POST['haslo'];
  15.  
  16. $result = mysql_query("SELECT * FROM uzytkownicy WHERE nick='".$user_name."' AND haslo='".$user_pass."' LIMIT 1");
  17. if (mysql_num_rows($result)) {
  18. $data = mysql_fetch_assoc($result);
  19. setcookie("user", $data['id'], time() + 3600 * 24 * 30, "/", "", "0");
  20. } else {
  21. echo 'Podane haslo lub login jest nie poprawny';
  22. }
  23. }
  24.  
  25. if (isset($_COOKIE['user']))
  26. {
  27. echo 'Użytkownik zalogowany jako: '.$userdata['nick'].'<br />';
  28. echo '<a href="wylog.php">Wylogowanie</a><br />';
  29. }
  30. else
  31. {
  32. // tworzenie formularza logowania
  33. echo '<form method="post" action="'.basename($_SERVER['PHP_SELF']).'">';
  34. echo '<table>';
  35. echo '<tr><td>Identyfikator użytkownika:</td>';
  36. echo '<td><input type="text" name="iduzytkownika"></td></tr>';
  37. echo '<tr><td>Hasło:</td>';
  38. echo '<td><input type="password" name="haslo"></td></tr>';
  39. echo '<tr><td colspan="2" align="center">';
  40. echo '<input type="submit" value="Logowanie"></td></tr>';
  41. echo '</table></form>';
  42. }
  43.  

Plik odpowiedzialny za wylogowanie
  1. <?php
  2. header("P3P: CP='NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM'");
  3. setcookie("user", "", time() - 3600 * 24 * 30, "/", "", "0");
  4. header("Location: ".str_replace("&", "&", 'logowanie.php'));
  5. ?>


Ten post edytował arzach 15.06.2010, 18:36:45
Go to the top of the page
+Quote Post
kartin
post 15.06.2010, 18:26:09
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

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


Sprawdź
  1. unset($_COOKIE['user']))


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
arzach
post 15.06.2010, 18:27:28
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Dalej to samo już wcześniej unset próbowałem i nic.
Go to the top of the page
+Quote Post
gothye
post 15.06.2010, 18:31:00
Post #4





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


jeśli już to ciasteczka usuwasz tak :
  1. setcookie("user", $data['id'], time() - 3600 * 24 * 30, "/", "", "0");


Ten post edytował gothye 15.06.2010, 18:31:30


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
arzach
post 15.06.2010, 18:33:20
Post #5





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Dalej nic z tego. Nie mam pojęcia, czemu nie chce się usunąć.

Ten post edytował arzach 15.06.2010, 18:35:16
Go to the top of the page
+Quote Post
gothye
post 15.06.2010, 18:37:02
Post #6





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


moze zmien paramete securee ( "0" ) na NULL


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
arzach
post 15.06.2010, 18:39:21
Post #7





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 27.11.2008

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


Dalej to samo nie da się usnąć.
Go to the top of the page
+Quote Post
netmare
post 15.06.2010, 20:48:56
Post #8





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


Ja mam propozycję żebyś to napisał od nowa z użyciem sesji. Pomijając kwestię problemu z usunięciem ciasteczka z przeglądarki pozostają kwestie bezpieczeńswa.


  1. $result = mysql_query("SELECT * FROM uzytkownicy WHERE id='".$_COOKIE['user']."' LIMIT 1");

To jest mocno podatne na iniekcję sql, zresztą sprawdzanie loginu i hasła też. Chyba że masz magic_quotes włączone.

Do tego nie potrzeba wcale się logować żeby być zalogowanym. Oznacza to że jeśli rozszerzysz skrypt o rozpoznawanie jakiegoś admina od zwykłych userów to kwestia znalezienia jego id to będą najwyżej pojedyncze minuty.

Proponuję przynajmniej napisać na początku tego pliku i wszystkich innych session_start() i używania $_SESSION zamiast $_COOKIE oraz upewnienie się że jest włączone magic_quotes_gpc. A docelowo radzę poczytać więcej o sesjach i sposobach ataków na nie, a także SQL Injection.
Go to the top of the page
+Quote Post
thek
post 15.06.2010, 21:33:18
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Netmare... Magic_quotes to złe rozwiązanie. Mi osobiście tyle krwi już napsuło, że głowa boli. Jak programista powinieneś kontrolować co jest escape'owane, a co nie, bo czasem jest to uszczęśliwianie na siłę. Wrzucasz tekst, chcesz go "czysty", a się okazuje, że na dzień dobry masz go już poprawionego i musisz go przywracać do starej formy bo taką masz dyrektywę domyślnie ustawioną i nie możesz jej zmienić ani w htaccess, ani nijak, tylko musisz wykrywać czy jest włączona i reagować odpowiednio.

Do autora zaś tematu. Co z tego, że niby ciacho usuwasz, skoro w kodzie nie widzę jego niszczenia? Inna sprawa, że ciacho działa nawet z datą przeszłą do czasu zamknięcia strony Do tego czasu sprawdzanie poprzez isset zwróci nam true. Ja już co sprawdzaj wartość w nim zaszytą, czy jest prawidłowa, bo powinna być większa niż aktualny czas. Jeśli nie jest... ważność się skończyła.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
netmare
post 15.06.2010, 21:45:35
Post #10





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


@ thek

nie uznaję MQ, starałem się tylko wskazać mocno początkującemu koledze podstawowe luki w zabezpieczeniach, bez niepotrzebnych na jego poziomie wywodów winksmiley.jpg
Go to the top of the page
+Quote Post
erix
post 15.06.2010, 21:58:50
Post #11





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




Ale w PHP6 MQ nie będzie, więc wywody są potrzebne. winksmiley.jpg
Powód edycji: [thek]: Mi nie trzeba mówić. Ale po co uczyć złych praktyk? ;)


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

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

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: 8.07.2025 - 03:26