Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Bezpieczeństwo i poprawność logowania
Darekxp
post 19.04.2012, 22:43:50
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 13.05.2007

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


Witam!

Czy takie logowanie jest w miare bezpieczne? Jeśli nie co jest nie tak? Za pomoc z góry dziękuję

  1. <?php
  2.  
  3. if($_SESSION['userId'] > 1)
  4. {
  5. header('Location: /index.php');
  6. }
  7. else {
  8.  
  9. $user = filter($_POST['login']);
  10. $password = md5(filter($_POST['password']));
  11. $query = mysql_query(' SELECT * FROM `users` WHERE userLogin="'.query($user).'" AND userPassword="'.query($password).'" AND userActive="yes" ');
  12.  
  13. if($query && mysql_num_rows($query) == 1)
  14. {
  15. while($row = mysql_fetch_array($query))
  16. {
  17. if (!isset($_SESSION['initiate']))
  18. {
  19. $_SESSION['initiate'] = true;
  20. $_SESSION['initiate'] = $new;
  21. $_SESSION['address_ip'] = $_SERVER['REMOTE_ADDR'];
  22. $_SESSION['userId'] = $row['userId'];
  23. $_SESSION['userLogin'] = $row['userLogin'];
  24. $_SESSION['userPassword'] = $row['userPassword'];
  25. $_SESSION['userActive'] = $row['userActive'];
  26. $_SESSION['userGroup'] = $row['userGroup'];
  27. $_SESSION['userName'] = $row['userName'];
  28. $_SESSION['userSurname'] = $row['userSurname'];
  29. $_SESSION['userCity'] = $row['userCity'];
  30. $_SESSION['userPhoneNumber'] = $row['userPhoneNumber'];
  31. $_SESSION['userEmail'] = $row['userEmail'];
  32. $_SESSION['userGGNumber'] = $row['userGGNumber'];
  33. $_SESSION['userAboutMe'] = $row['userAboutMe'];
  34. $_SESSION['userDateBirth'] = $row['userDateBirth'];
  35.  
  36. $_SESSION['userHideDateBirth'] = $row['userHideDateBirth'];
  37. $_SESSION['userHideSurname'] = $row['userHideSurname'];
  38. $_SESSION['userHidePhoneNumber']= $row['userHidePhoneNumber'];
  39. $_SESSION['userHideEmail'] = $row['userHideEmail'];
  40. $_SESSION['userHideGGNumber'] = $row['userHideGGNumber'];
  41. $_SESSION['userHideAboutMe'] = $row['userHideAboutMe'];
  42.  
  43. $_SESSION['userLastLogin'] = $row['userLastLogin'];
  44. $_SESSION['userLastLoginIP'] = $row['userLastLoginIP'];
  45.  
  46. mysql_query(' UPDATE `users` SET userLastLogin="'.query(date('Y-m-d H:i:s')).'" WHERE userId="'.query($_SESSION['userId']).'" LIMIT 1');
  47. mysql_query(' UPDATE `users` SET userLastLoginIP="'.query($_SERVER['REMOTE_ADDR']).'" WHERE userId="'.query($_SESSION['userId']).'" LIMIT 1');
  48.  
  49. header('Location: /myAccount');
  50. }
  51. }
  52. }
  53. else
  54. {
  55. systemMessage('Logowanie', 'Prawdopodobnie podałeś zły login, lub hasło.', '', '', 'login', 'Spróbuj ponownie się zalogować', '', '', '', 'COMMUNIQUE_ERROR');
  56. }
  57. }
  58.  
  59. ?>
Go to the top of the page
+Quote Post
vieri_pl
post 20.04.2012, 03:31:22
Post #2





Grupa: Zarejestrowani
Postów: 406
Pomógł: 9
Dołączył: 24.07.2005
Skąd: Bydgoszcz

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


Na pewno możesz posolić hasło, samo md5 to dość mało.

PS: Dlaczego masz dwa razy mysql_query, linia 48,49? Przecież to jedno zapytanie załatwi wink.gif
Go to the top of the page
+Quote Post
pyro
post 20.04.2012, 04:24:22
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cały ten kod jest kompletnie bez sensu. Nie jest ani bezpieczny, ani wydajny, ani zgodny z zasadą DRY. Aż mi się nie chce wymieniać. Spróbuj to jeszcze raz napisać.

Ten post edytował pyro 20.04.2012, 04:24:56


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
vieri_pl
post 20.04.2012, 04:37:19
Post #4





Grupa: Zarejestrowani
Postów: 406
Pomógł: 9
Dołączył: 24.07.2005
Skąd: Bydgoszcz

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


Pyro, ale kod nie jest bez sensu bo spełnia swoje zadanie, usera zaloguje, a to w jakim stylu... Tak na dobrą sprawę kazałeś człowiekowi napisać to jeszcze raz nie podając mu żadnych wskazówek jak to powinno wyglądać.

Od siebie dodam:
- jeśli do wartości do sesji mają taką samą nazwę jak rekord w bazie to wystarczy zrobić foreach($row as $key => $val) i dopisać wszystko do sesji.
- na pewno nie musisz pobierać wszystkiego (*) z bazy by zobaczyć czy user istnieje, do tego nie musisz pobierać nawet więcej niż dwóch rekordów wink.gif
- $_SESSION['initiate'] najpierw true, a potem nie zdefiniowana zmienna $new? To notice.
- Zamiast funkcji date w PHP w zapytaniu możesz użyć NOW()
Go to the top of the page
+Quote Post
Niktoś
post 20.04.2012, 15:06:28
Post #5





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

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


Przechowywanie wszystkiego w sesji,nie jest ani bezpieczne, ani wydajne.
Go to the top of the page
+Quote Post
PanGuzol
post 21.04.2012, 01:48:00
Post #6





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Korzystasz z $_SESSION w 3 linii ale session_start() masz dopiero w 17.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
Van Pytel
post 21.04.2012, 11:30:32
Post #7





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

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


Po co to:
  1. AND userPassword="'.query($password)


Lepiej pobrać login i hasło usera z bazy (WHERE login = login), a potem dopiero sprawdzić w php czy hasło równa się haśle (if...)
Go to the top of the page
+Quote Post
PanGuzol
post 21.04.2012, 17:43:09
Post #8





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Cytat(Van Pytel @ 21.04.2012, 11:30:32 ) *
Po co to:
  1. AND userPassword="'.query($password)


Lepiej pobrać login i hasło usera z bazy (WHERE login = login), a potem dopiero sprawdzić w php czy hasło równa się haśle (if...)

Lepiej przenieść jak najwięcej logiki do bazy danych. Czyli od razu w zapytaniu dać porównania do loginu i hasła, warto jeszcze do tego zrobić index unique dla loginu.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
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: 16.06.2025 - 21:39