Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Bezpieczeństwo a $_SESSION
Forum PHP.pl > Forum > Przedszkole
djtomaszq
Mam takie pytanie odnośnie bezpieczeństwa $_SESSION.
Jeśli loguje się w taki sposłób:
  1. if($zapytanie = $polaczenie->query(
  2. sprintf("SELECT id_users, haslo, login, monety FROM users WHERE login = '%s'",
  3. mysqli_real_escape_string($polaczenie, $login))))
  4. {
  5. $ile_login = $zapytanie->num_rows;
  6. if($ile_login > 0)
  7. {
  8. $wiersz = $zapytanie->fetch_assoc();
  9.  
  10. if(password_verify($haslo, $wiersz['haslo']))
  11. {
  12. echo "zalogowany";
  13. $_SESSION['zalogowany'] = true;
  14. $_SESSION['id'] = $wiersz['id_users'];
  15. $_SESSION['login'] = $wiersz['login'];
  16. $_SESSION['monety'] = $wiersz['monety'];
  17. $_SESSION['ranga'] = $wiersz['id_rangi'];
  18.  
  19. $zapytanie->free_result();
  20. header('Location: '.linkGenerator('news').'');
  21. }else{
  22. header('Location: '.linkGenerator('logowanie').'');
  23. }
  24. }else
  25. {
  26. header('Location: '.linkGenerator('logowanie').'');
  27. }
  28. }else
  29. {
  30. throw new Exception($polaczenie->error);
  31. }


i do tego na podstronie stosuje

  1. if(isset($_POST['submit']))
  2. {
  3. try
  4. {
  5. if($polaczenie->connect_errno != 0)
  6. {
  7. throw new Exception($polaczenie-mysqli_connect_errno());
  8. }else
  9. {
  10. [color="#FF0000"]$login = $_SESSION['id'];[/color]
  11.  
  12. if(!$zapytanie = $polaczenie->query("SELECT * FROM message WHERE id_user = $login"))
  13. {
  14. throw new Exception($polaczenie->error);
  15. }else
  16. {
  17. //wyypisanie wiadomosci
  18. }
  19.  
  20. $polaczenie->close();
  21. }
  22. }
  23. }catch(Exception $e)
  24. {
  25. echo $e;
  26. }


To czy ten drugi zapis jest bezpieczny? (Zaznaczyłęm na czerwono o które fragmenty głównie mi choodzi).

Czy pobieranie z takiej sessi do zmiennej jest dobre i czy można w taką sesję ingerować przy tym zapisie?
nospor
Masz karygodny blad
$login = $_SESSION['id'];

powinno byc
$id = $_SESSION['id'];
tongue.gif

Staraj sie trzymac nazewnictwa bo potem sie pogubisz przy wiekszych projektach.
Co do pytania to tak, tak sie zazwyczaj robi.
viking
Dla pewności nigdy nie dopuszczaj aby dane szły do zapytania niebindowane. Gdzieś tam sobie zmienisz, nawet przez przypadek, że $login = $_POST... i problem.
Możesz też zmienić http://php.net/manual/en/mysqli-driver.report-mode.php, wtedy blokiem try/catch zgarniesz wszystko.
Rysh
Dlaczego kolega sprawdza hasło w PHP zamiast od razu w MYSQL ? Przecież to o wiele wydajniej i bezpieczniej niż pobierać w ogóle hasła do skryptu.
viking
A jak ma sprawdzić zakodowane hasło od razu w bazie?
Oklejek
A na przykład tak dla md5:
  1. $sql = "SELECT id_users, haslo, login, monety FROM users WHERE login = '%s' AND haslo = '".md5($_POST['haslo'])."'"
Spawnm
Cytat(Oklejek @ 23.09.2016, 22:49:23 ) *
A na przykład tak dla md5:
  1. $sql = "SELECT id_users, haslo, login, monety FROM users WHERE login = '%s' AND haslo = '".md5($_POST['haslo'])."'"

Zdajesz sobie sprawę że md5 już się nie korzysta + do hasła dodaje się sól + twój kod jest podatny na DoS bo zezwalasz na wsadzenie nieograniczenie długiego ciągu znaków do funkcji hashującej? wink.gif
viking
Chłop się zahibernował w 2000 i teraz powrócił wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.