Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt] prosze o opinie o skrypcie autoryzacji
Forum PHP.pl > Inne > Oceny
x11100b
Witam.

Przesiadam sie z autoryzacji ciasteczkowej na sesje - mialbym prosbe do osob znajacych sie na bezpieczenstwie zeby wypowiedzieli sie o moim skrypcie:

  1. <?php
  2.  
  3.  
  4. // inicjuje zmienne ktore beda zawieraly informacje o uzytkowniku potrzebne dla skryptow w dalszej czesci strony:
  5.  
  6. $_vc_typ = 0; // typ 0 oznacza brak autoryzacji
  7.  
  8. if((!isset($_SESSION['uzytkownik'])) ||(!isset($_SESSION['md5_haslo']))) {
  9.  
  10. $_SESSION['uzytkownik'] = 0;
  11. $_SESSION['haslo'] = 0;
  12.  
  13. } else {
  14.  
  15. // pobieram zmienne przechowywane w sesji:
  16. $haslo = $_SESSION['md5_haslo'];
  17. $id = $_SESSION['id'];
  18.  
  19. // sprawdzam czy dane trzymane w sesji sa poprawne i pobieram login (log) i typ uzytkownika (typ):
  20. $sql = mysql_connect('localhost','root','');
  21. mysql_select_db('testowa');
  22. $zap = mysql_query("SELECT `log`,`typ` FROM `_vc_usr` WHERE `id`='$id' AND `has`='$haslo' LIMIT 1");
  23. mysql_close($sql);
  24.  
  25.  
  26. if ( mysql_num_rows($zap) == 1 ) {
  27.  
  28. // jesli dane byly poprawne:
  29. $rek = mysql_fetch_array($zap);
  30. $_vc_login = $rek['log']; // login pobieram aby powitac uzytkownika
  31. $_vc_typ = $rek['typ']; // dalej, sprawdzajac wartosc zmiennej "_vc_typ" bede wiedzial co moge wyswietlic a co nie
  32.  
  33. } else {
  34.  
  35. // jesli byly niepoprawne:
  36. echo 'Sesja zawiera nieprawidlowe dane. Koniec pracy skryptu.';
  37. exit();
  38.  
  39. }
  40.  
  41. }
  42. ?>


baza z uzytkownikami tworzona jest poleceniem:

  1. CREATE TABLE `vc_usr` (`id` INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT ,`log` VARCHAR( 30 ),`has` VARCHAR( 30 ), `typ` INTEGER )
bl4ck_b0x
Jedyne co zauważyłem to to żebyś filtrował dane wprowadzane przez użytkownika smile.gif
bim2
Daj sobie
  1. $_SESSION['haslo'] = "' OR 1=1 ";
  2.  

a login moze byc i pusty i zobacz że cię zaloguje :]
x11100b
a nie wystarczy filtrowac danych od uzytkownika podczas odczytu danych z metody POST / GET ?

mozna jakos "sztucznie" ustawic jakas wartosc sesji w moim skrypcie, np. poprzez dopisanie czegos do adresu URL?

nanioslem poprawki, prosze o ocene:

  1. <?php
  2.  
  3. // inicjacja sesji:
  4.  
  5. // dane do polaczenia z baza danych:
  6. require('skrypty/_vc_include/php/mysql.php');
  7.  
  8. // inicjuje zmienne ktore beda zawieraly informacje o uzytkowniku potrzebne dla skryptow w dalszej czesci strony:
  9.  
  10. $_vc_typ = 0; // typ 0 oznacza brak autoryzacji
  11. unset($zap);
  12.  
  13.  
  14. // jesli uzytkownik przeslal dane metoda POST:
  15. if ((isset($_POST['vc_haslo'])) && (isset($_POST['vc_login']))){
  16.  
  17. // pobieram dane:
  18. $haslo = addslashes(md5($_POST['vc_haslo']));
  19. $login = addslashes($_POST['vc_login']);
  20. $zap = "SELECT `id`,`log`,`typ` FROM `vc_usr` WHERE `log`='$login' AND `has`='$haslo' LIMIT 1";
  21.  
  22. // jesli sa odpowiednie zmienne w sesji:
  23. } else if((isset($_SESSION['_vc_uzytkownik'])) && (isset($_SESSION['_vc_md5_hasla']))) {
  24.  
  25. // pobieram zmienne przechowywane w sesji:
  26. $haslo = addslashes($_SESSION['_vc_md5_hasla']);
  27. $id = addslashes($_SESSION['_vc_uzytkownik']);
  28. $zap = "SELECT `id`,`log`,`typ` FROM `vc_usr` WHERE `id`='$id' AND `has`='$haslo' LIMIT 1";
  29.  
  30. }
  31.  
  32.  
  33.  
  34. // jesli zapytanie bylo wykonane:
  35. if(isset($zap)){
  36.  
  37. // sprawdzam czy dane trzymane w sesji / przeslane metoda POST sa poprawne i pobieram login (log) i typ uzytkownika (typ):
  38. $sql = mysql_connect($_VC_S,$_VC_U,$_VC_H);
  39. mysql_select_db($_VC_B);
  40. $zap = mysql_query($zap);
  41. mysql_close($sql);
  42.  
  43. // i dane byly poprawne:
  44. if ( mysql_num_rows($zap) == 1 ) {
  45.  
  46. $rek = mysql_fetch_array($zap);
  47. $_vc_log = $rek['log']; // login pobieram aby powitac uzytkownika
  48. $_vc_typ = $rek['typ']; // dalej, sprawdzajac wartosc zmiennej "_vc_typ" bede wiedzial co moge wyswietlic a co nie
  49. $_vc_uid = $rek['id']; // id uzytkownika potrzebne do oznazcania zmian ktore on dokonal
  50.  
  51. // wstawiamy dane do sesji:
  52. $_SESSION['_vc_uzytkownik'] = $_vc_uid;
  53. $_SESSION['_vc_md5_hasla'] = $haslo;
  54.  
  55. }
  56.  
  57. }
  58.  
  59.  
  60.  
  61.  
  62. ?>
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.