Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Bezpieczeństwo a $_SESSION
djtomaszq
post 22.09.2016, 09:31:36
Post #1





Grupa: Zarejestrowani
Postów: 192
Pomógł: 0
Dołączył: 5.07.2015

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


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?


Ten post edytował djtomaszq 22.09.2016, 09:32:23
Go to the top of the page
+Quote Post
nospor
post 22.09.2016, 09:42:59
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


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

"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 22.09.2016, 09:56:43
Post #3





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
Rysh
post 23.09.2016, 19:02:58
Post #4





Grupa: Zarejestrowani
Postów: 821
Pomógł: 111
Dołączył: 11.09.2006
Skąd: Biała Podlaska

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


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.


--------------------
Go to the top of the page
+Quote Post
viking
post 23.09.2016, 19:05:33
Post #5





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


A jak ma sprawdzić zakodowane hasło od razu w bazie?


--------------------
Go to the top of the page
+Quote Post
Oklejek
post 23.09.2016, 21:49:23
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 30.01.2012

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


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'])."'"


Ten post edytował Oklejek 23.09.2016, 21:51:06
Go to the top of the page
+Quote Post
Spawnm
post 23.09.2016, 22:54:39
Post #7





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




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
Go to the top of the page
+Quote Post
viking
post 24.09.2016, 05:44:33
Post #8





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Chłop się zahibernował w 2000 i teraz powrócił wink.gif


--------------------
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 - 22:07