Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Czy jest to wystarczające zabezpieczenie? - autoryzacja
b_chmura
post
Post #1





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Witam

Chciałbym się zapytać was ludzi z doświadczeniem i pomysłem czy takie zabezpieczenie jest wystarczające:
  1. <?php
  2. //logowanie - jeśli login i hasło są poprawne tworzy się sesja zakodowanego przez md5 loginu 
    i hasla
  3. function loguj($login, $pass) 
  4. {
  5. $spr = mysql_query("SELECT * FROM `USER` WHERE `login` = 'login' AND `haslo` = '$pass'" LIMIT 0,1);
  6.  
  7. if(mysql_num_rows($spr) == 1)
  8. {
  9. $_SESSION['login'] = md5($login.$pass);
  10. return true;
  11. }
  12. else
  13. {
  14. return false;
  15. }
  16. }
  17. //sprawdzanie czy user jest zalogowany - jeśli dane wyciągnięte i zakodowane przez md5 zgadzają sie z sesją wszystko jes
    t ok
  18. function spr_usr()
  19. {
  20. $query = mysql_query("SELECT * FROM `USER` WHERE `login` = '$login' AND `haslo` = '$pass'");
  21.  
  22. while($user = mysql_fetch_array($query))
  23. {
  24. if(md5($user['login'].$user['haslo']) = $_SESSION['login'])
  25. {
  26. return true;
  27. }
  28. else
  29. {
  30. return false;
  31. }
  32. }
  33. }
  34. ?>

przejdzie to?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
cornholio666
post
Post #2





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Tu chyba masz błąd przy 'login'

  1. <?php
  2. $spr = mysql_query("SELECT * FROM `USER` WHERE `login` = 'login' AND `haslo` = '$pass'" LIMIT 0,1);
  3. ?>


Do czego to służy:

  1. <?php
  2. $_SESSION['login'] = md5($login.$pass);
  3. ?>


Chyba dość niewydajne:

  1. <?php
  2. if(md5($user['login'].$user['haslo']) = $_SESSION['login'])
  3. ?>


Po co az 2 zapytania ?


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
b_chmura
post
Post #3





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


ad1
tak powinno być `login` = '$login'

ad2
Przypisuje sesji "login" wartość

ad3
powinno być:
  1. <?php
  2. if(md5($user['login'].$user['haslo']) == $_SESSION['login'])
  3. ?>



ad4
bo są to osobne funkcje

Ten post edytował b_chmura 11.09.2007, 15:10:55
Go to the top of the page
+Quote Post
Puciek
post
Post #4


TAO programowania


Grupa: Zarejestrowani
Postów: 340
Pomógł: 3
Dołączył: 25.03.2003
Skąd: ze słoika

Ostrzeżenie: (30%)
XX---


Ale nie wyjasniles po jaka cholere dane do sesji cisniesz w md5.
Dalej, skąd sie bierze $login i $pass ? Pobierasz je z $_POST ? z $_GET ? z maszyny losujacej ? Czy poprostu w pelni radosnie jedziesz na register_globals ?
Stringi lepiej robic apostrofami, czyli
  1. <?php
  2. mysql_query( 'SELECT * FROM `USER` WHERE `login` = "'.$login.'" AND `haslo` = "'.$pass.'" LIMIT 0,1 ');
  3. ?>


Ten post edytował Puciek 11.09.2007, 15:17:36


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

http://puciek.wordpress.com prywatnie o świecie
Go to the top of the page
+Quote Post
syntax
post
Post #5





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

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


pakowanie hash'a do sesji jest troche bez sensu, ja bym to wszytsko zrobil w jednej funkcji.
Go to the top of the page
+Quote Post
cornholio666
post
Post #6





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Cytat
ad4
bo są to osobne funkcje


Po co ci aż dwa zapytania żeby sprawdzic czy uzytkownik istnieje? nie da sie jednym ?

Tutaj w pętli haszujesz login i haslo, czyli jak baza bedzie miala 100000 userów to troche niewydajne bedzie.

  1. <?php
  2. if(md5($user['login'].$user['haslo']) == $_SESSION['login'])
  3. ?>




Z kodu wynika ze trzymasz hasło w bazie w postaci jawnej a to duzy błąd


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
b_chmura
post
Post #7





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


a czy w ten sposób odpowiednio sie zabezpieczę?

  1. <?php
  2. function check_user($login, $pass)
  3. {
  4. if(empty($_SESSION['login']))
  5. {
  6. if(empty($login) OR empty($pass))
  7. {
  8. echo 'Nie podałeś Loginu i/lub Nicka';
  9. return false;
  10. }
  11. else
  12. {
  13. $dane = mysql_query("SELECT * FROM `USER` WHERE `login` = '".$login."' AND `haslo` = '".$pass."' LIMIT 0, 1" );
  14.  
  15. if(mysql_num_rows($dane) == 1)
  16. {
  17. $_SESSION['login'] = 'zalogowany';
  18.  
  19. echo $login.' poprawnie sie zalogował';
  20. return true;
  21. }
  22. else
  23. {
  24. echo 'Login i/lub Hasło są nieprawidłowe!';
  25. return false;
  26. }
  27. }
  28. }
  29. else
  30. {
  31. return true;
  32. }
  33. }
  34. ?>


zmienna $login i $pass pobierane są z formularza.
Go to the top of the page
+Quote Post
cornholio666
post
Post #8





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


  1. <?php
  2. if(!isset($_SESSION['login']){
  3.  $_SESSION['login'] = false;
  4. }
  5.  
  6. function check_user($login, $pass)
  7. {
  8.  
  9.  
  10. if(empty($login) OR empty($pass))
  11. {
  12. echo 'Nie podałeś Loginu i/lub Nicka';
  13. return false;
  14. }
  15. else
  16. {
  17. $login = mysql_escape_string($login);
  18. $pass = md5($pass);
  19.  
  20. $dane = mysql_query("SELECT * FROM `USER` WHERE `login` = '".$login."' AND `haslo` = '".$pass."' LIMIT 0, 1" );
  21.  
  22. if(mysql_num_rows($dane) == 1)
  23. {
  24. $_SESSION['login'] = true;
  25.  
  26. echo $login.' poprawnie sie zalogował';
  27. return true;
  28. }
  29. else
  30. {
  31. echo 'Login i/lub Hasło są nieprawidłowe!';
  32. return false;
  33. }
  34.  
  35. }
  36.  
  37. }
  38. ?>


mniej wiecej...

Ten post edytował cornholio666 11.09.2007, 16:01:34


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
b_chmura
post
Post #9





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


a jakie jest prawdopodobieństwo ze ktoś się "włamie" nie posiadając poprawnych danych ( w tym wypadku)
Go to the top of the page
+Quote Post
cornholio666
post
Post #10





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Przeczytaj to http://forum.php.pl/index.php?showtopic=23258

to http://www.gajdaw.pl/varia/xss.html

Przetestuj skrypt


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
erix
post
Post #11





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




Co do danych w sesji: nie musisz trzymać danych zahaszowanych w sesji, ale lepiej, jeśli katalog z danymi przeniesiesz w "niepubliczne" miejsce (bo domyślnie /tmp).

No i obowiązkowo to, o czym cornholio666 wspomniał.


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

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
templar
post
Post #12





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 13.09.2006
Skąd: Poland

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


Cytat(b_chmura @ 11.09.2007, 14:03:56 ) *
Witam

Chciałbym się zapytać was ludzi z doświadczeniem i pomysłem czy takie zabezpieczenie jest wystarczające:
  1. <?php
  2. //logowanie - jeśli login i hasło są poprawne tworzy się sesja zakodowanego przez md5 loginu 
    i hasla
  3. function loguj($login, $pass) 
  4. {
  5. $spr = mysql_query("SELECT * FROM `USER` WHERE `login` = 'login' AND `haslo` = '$pass'" LIMIT 0,1);
  6.  
  7. if(mysql_num_rows($spr) == 1)
  8. {
  9. $_SESSION['login'] = md5($login.$pass);
  10. return true;
  11. }
  12. else
  13. {
  14. return false;
  15. }
  16. }
  17. //sprawdzanie czy user jest zalogowany - jeśli dane wyciągnięte i zakodowane przez md5 zgadzają sie z sesją wszystko jes
    t ok
  18. function spr_usr()
  19. {
  20. $query = mysql_query("SELECT * FROM `USER` WHERE `login` = '$login' AND `haslo` = '$pass'");
  21.  
  22. while($user = mysql_fetch_array($query))
  23. {
  24. if(md5($user['login'].$user['haslo']) = $_SESSION['login'])
  25. {
  26. return true;
  27. }
  28. else
  29. {
  30. return false;
  31. }
  32. }
  33. }
  34. ?>

przejdzie to?


Przed:

  1. <?php
  2. $spr = mysql_query("SELECT * FROM `USER` WHERE `login` = 'login' AND `haslo` = '$pass'" LIMIT 0,1);
  3. ?>


Zapodałbym:

$login = str_replace("'", '', $login);
$pass = str_replace("'", '', $pass);

Nie ma co się bawić addslashes'ami i innymi badziewiami, lepiej po prostu wyciąć ten apostrof w cholerę - tak jest najbezpieczniej.
I najlepiej robić to wszędzie tam, gdzie zmienna bierze udział w zapytaniu MySQL - chyba, że te apostrofy są potrzebne, wtedy lepiej
zastąpić je funkcją htmlentities() i dopiero zapisywać do bazy.

Pozdrawiam.
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 Aktualny czas: 21.08.2025 - 21:45