Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Bezpieczeństwo przesyłanych danych, weryfikacja loginu przesłanego przez urzytkownika
Rymtumtum
post 4.02.2018, 17:21:29
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2016

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


Witam, napisałem skrypt logowania do strony i chciałbym żebyście wskazali mi ewentualne błędy w zabezpieczeniu tego skryptu.

  1. <?php
  2. if (isset($_POST['login']) && (isset($_POST['password']))) {
  3. require_once("connect.php");
  4. mysqli_report(MYSQLI_REPORT_STRICT);
  5. try {
  6. $connect = new mysqli($host, $db_user, $db_password, $db_name);
  7. if ($connect->connect_errno != 0) {
  8. throw new Exception(mysqli_connect_errno());
  9. } else {
  10. $veryfication = true;
  11. $login = $_POST['login'];
  12. $var_login = filter_var($login, FILTER_SANITIZE_STRING);
  13. $password = $_POST['password'];
  14. $hash_pass = hash('sha512', $password);
  15. $result = $connect->query("SELECT * FROM users WHERE login LIKE '$var_login'");
  16. $how_much_user = $result->num_rows;
  17. if ($how_much_user == 1) {
  18. $record = $result->fetch_assoc();
  19. $user_pass = $record['password'];
  20. if ($hash_pass !== $user_pass) {
  21. $veryfication = false;
  22. }
  23. } else {
  24. $veryfication = false;
  25. }
  26. if ($veryfication == true) {
  27. echo "Udalo Ci sie zalogowac!<br>Witaj ".$var_login."!";
  28. } else {
  29. echo "bledne danie logowania;
  30. }
  31.  
  32. $connect->close();
  33. }
  34. } catch(Exception $error) {
  35. echo '<span style="color:red;">Błąd serwera! Przepraszamy za niedogodności. Prosimy o rejestrację w innym terminie.</span>';
  36. echo '<br>Informacja dla dewelopera: '.$error;
  37. }
  38. } else {
  39. header("Location: ../log-in");
  40. }
  41. ?>


Go to the top of the page
+Quote Post
SmokAnalog
post 4.02.2018, 17:46:37
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Dwie rzeczy:
  1. Zapoznaj się z prepared statements.
  2. Hasło możesz sprawdzić na poziomie bazy danych, nie musisz pobierać danych użytkownika.
Go to the top of the page
+Quote Post
Rymtumtum
post 5.02.2018, 17:02:21
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2016

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


Cytat
1. Zapoznaj się z prepared statements.


Nie mam pojęcia jak mam się za to zabrać czytam na php manual i nie wiem jak do tego podejść jak by ktoś mógł podać jakiś przykład albo w skrócie o tym opowiedzieć.

Cytat
2. Hasło możesz sprawdzić na poziomie bazy danych, nie musisz pobierać danych użytkownika.


Poprawiłem by hasło sprawdzało na poziomie bazy danych

  1. try {
  2. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  3. if ($connect->connect_errno) {
  4. throw @new Exception($connect->error);
  5. } else {
  6. $login = $_POST['login'];
  7. $login = filter_var($login, FILTER_SANITIZE_STRING);
  8. $password = $_POST['password'];
  9. $password = hash('sha512', $password);
  10. if (!$result = $connect->query(sprintf("SELECT * FROM users WHERE login LIKE '%s' AND password LIKE '%s'",
  11. mysqli_real_escape_string($connect, $login),
  12. mysqli_real_escape_string($connect, $password)))) {
  13. throw @new Exception($connect->error);
  14. } else {
  15. $how_much_users = $result->num_rows;
  16. if ($how_much_users == 1) {
  17. echo "udalo Ci sie zalogowac";
  18. } else {
  19. echo "bledne dane logowania";
  20. }
  21. }
  22. }
  23. } catch(Exception $error) {
  24. echo $error;
  25. }
Go to the top of the page
+Quote Post
nospor
post 5.02.2018, 17:05:31
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




http://php.net/manual/en/mysqli.prepare.php

ps:
$how_much_users
uzytkownicy sa policzalni wiec nie much a many.
A juz lepiej to w ogole: $usersCount


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Rymtumtum
post 5.02.2018, 19:00:54
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2016

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


Czy to o to chodziło?? Wszystko działa tylko pytanie czy teraz jest bezpieczne ^^

  1. try {
  2. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  3. if ($connect->connect_errno) {
  4. throw @new Exception($connect->error);
  5. } else {
  6. $login = $_POST['login'];
  7. $login = filter_var($login, FILTER_SANITIZE_STRING);
  8. $password = $_POST['password'];
  9. $password = hash('sha512', $password);
  10. if ($stmt = mysqli_prepare($connect, "SELECT password FROM users WHERE login=? ")) {
  11. mysqli_stmt_bind_param($stmt, "s", $login);
  12. mysqli_stmt_execute($stmt);
  13. mysqli_stmt_bind_result($stmt, $user_password);
  14. mysqli_stmt_fetch($stmt);
  15. mysqli_stmt_close($stmt);
  16. if ($password == $user_password) {
  17. echo "udalo Ci sie zalogowac";
  18. } else {
  19. echo "logowanie nie powiodlo sie";
  20. }
  21. }
  22. mysqli_close($connect);
  23. }
  24. } catch(Exception $error) {
  25. echo $error;
  26. }


No i 2 sprawa jak teraz zrobić porównanie hasła na poziomie bazy danych co_jest.gif
Go to the top of the page
+Quote Post
nospor
post 6.02.2018, 10:47:37
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Tak, o to chodzilo.
Co do hasla to bindujesz je tak samo jak login. Mozesz bindowac wiele wartosci a nie tylko jedna. W czym problem?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 6.02.2018, 11:07:36
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Ja bym jeszcze dodał poziom błędów na exception i pozbył się tego pierwszego ifa.


--------------------
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: 28.03.2024 - 11:59