Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] szybkie zabezpieczenie skryptu[/php]
Forum PHP.pl > Forum > Przedszkole
aga323
Witam, dawno si nie odzywałam z powodu braku czasu... sad.gif Ale mam mały problem. jedynym polem na mojej stronce gdzie możnaby wpuscić jakiś złośliwy kod jest logowanie i zależy mi żeby w tym polu można było wpisywac tylko litery a-z i cyfry 0-9 oraz aby nie można było wprowadzac LIKE itd. Po prostu chce choć troszkę zabezpieczyć ten kod. Wiem, ze temat byl tn juz poruszany jednak na prawde nie mam czasu tego wszystkiego czytać i prosze o syzbką odpowiedź. Podaję mój kod:
index.php
  1. <?php
  2. Panel Logowania:
  3. <form name="logowanie" action="log.php" method="POST">
  4. Użytkownik:
  5. <input type="text" name="user" value="" />
  6. Hasło:
  7. <input type="password" name="pass" value="" />
  8. <br>
  9. <input type="submit" value="zaloguj" />
  10. </form>
  11. ?>

log.php
  1. <?php
  2. $login_f = $_POST['user'];
  3. $pass_f = $_POST['pass'];
  4. //Laczenie z baza
  5. include ("connect.php");
  6. //-------------------------
  7. //  Zapytanie
  8. //-------------------------
  9. //pobieramy użytkownika o takim loginie z bazy.
  10. $query = mysql_query("SELECT * FROM `users` WHERE login='".$login_f."' AND haslo='".$pass_f."';");
  11. $result = mysql_fetch_array($query);
  12. if(!empty($result['login'])){
  13.  
  14.  $login_b = $result['login'];
  15.  $pass_b = $result['haslo'];
  16. //Tworzymy zmienną sesji $_SESSION['Login'] i nadajemy jej
  17. //wartość jaka jest w bazie danych odpowiadająca zalogowanemu użytkownikowi.
  18. $_SESSION['User']= $login_b;
  19. $_SESSION['User_id']= $result['id'];
  20. $_SESSION['ranga']= $result['ranga'];
  21. $_SESSION['klasa']= $result['klasa'];
  22. //Zalogowanego użytkownika przenosimy na strone index.php
  23. header( 'Location: ses.php' );
  24.  
  25. } 
  26. else
  27. {
  28. echo "Zły login";  
  29.  
  30. }
  31. ?>
cornholio666
"Nie mam czasu czytać całego twojego posta wiec:"

Temat: SQL Injection Insertion
aga323
Kurcze, szukam i szukam w tym temacie co podał cornholio ale nie ma za bardzo wyraźnie napisane jak zrobić tak żeby można było dodawać tylko zakres a-z i 0-9 sad.gif Mógłby ktoś mi napisać mniej więcej jak to zrobić?
cornholio666
Niech użytkownik może wpisać sobie co chce. Jak zabezpieczysz formularz jak w linku który ci podałem to bedzie bez znaczenia co on tam wpisuje.
aga323
Ale które zabezpieczenia Twoim zdaniem będą najlepsze, bo podawali tam kilka rodzajów zresztą ogóle jak dla mnie mało dokładnie. A nie chce nie wiadomo ile tego dawać żeby skrypt mi aż tak bardzo nie zwalniał. Które są takie najważniejsze, żeby nie było zbyt łatwo się włamać..? Sorki ale w tej kwestii jestem laikiem i po prostu chce wiedzieć co będzie najlepsze smile.gif
cornholio666
np. http://www.php.net/manual/pl/function.mysq...cape-string.php
aga323
Ok. czyli w moim przypadku powinno to wyglądac mniej więcej tak:
  1. <?php
  2. $login_ = $_POST['user'];
  3. $login_f = mysql_escape_string($login_);
  4. $pass_ = $_POST['pass'];
  5. $lpass_f = mysql_escape_string($pass_);
  6. //Laczenie z baza
  7. include ("connect.php");
  8. //-------------------------
  9. //  Zapytanie
  10. //-------------------------
  11. //pobieramy użytkownika o takim loginie z bazy.
  12. $query = mysql_query("SELECT * FROM `users` WHERE login='".$login_f."' AND haslo='".$pass_f."';");
  13. $result = mysql_fetch_array($query);
  14. ?>

Powinno to wyglądac tak jak wyżej czy inaczej to zrobić?
cornholio666
Można to skrócic lekko

  1. <?php
  2. $login_f = mysql_escape_string($_POST['user']);
  3. ?>


Hasło trzymasz w bazie w postaci jawnej a to bardzo niedobrze.
aga323
A duzo trzeba zmienić żeby bylo kodowane? np w md5 czy cos? na pewno w bazie trzba zmienic rodzaj danych, ale czy w skrypcie trzeba by duzo zmienić?
cornholio666
Jak dopisujesz usera to przed dodaniem do bazy przepuszczasz hasło przez md5

Jak sprawdzasz dane jak sie logujesz to przepuszczasz przez md5 i sprawdzasz czy skróty się zgadzają. Jak tak to logujesz.

http://pl.wikipedia.org/wiki/MD5 - tu sobie przeczytaj i znajdz jaką skrót ma długość. Taka musisz mieć w bazie. Pole typu VARCHAR
aga323
Wiem, że zabrzmi to dziwnie ale ja z tego raczej mało kapuje. Czy mógłbys mi na przykładzie tego mojgo skryptu napisać co powinno byc zmienione i co w bazie zmienić mniej więcej?
in5ane
piszesz:
  1. <?php
  2. $query = mysql_query("SELECT * FROM `users` WHERE login='".$login_f."' AND haslo=md5('".$pass_f."');");
  3. ?>


Możliwe błędy z apostrofami, bo nie patrzyłem na to. Takie zapytanie tongue.gif
cornholio666
W bazie tam gdzie masz pole "haslo" dajesz typ VARCHAR o długości 32.

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


W bazie musisz mieć zahaszowane hasło czyli jak twoje hasło to "Ala ma kota" to w bazie powinnaś mieć zapisane "91162629d258a876ee994e9233b2ad87" bo

Cytat
MD5("Ala ma kota") = 91162629d258a876ee994e9233b2ad87



Przy okazji to masz błąd:

  1. <?php
  2. $lpass_f = mysql_escape_string($pass_);
  3.  
  4. AND haslo='".$pass_f."';");
  5. ?>
aga323
Czyli przed kazdym wysłaniem czy sprawdzeniem danych związanych z haslem poprzedzic to md5? A jak np. mam opcje zmiany hsla i chce zeby wysiwtlilo mi sie normalne a nie zakodowane to co mam zrobic?
Cienki1980
Cytat(aga323 @ 27.09.2007, 19:55:34 ) *
Czyli przed kazdym wysłaniem czy sprawdzeniem danych związanych z haslem poprzedzic to md5? A jak np. mam opcje zmiany hsla i chce zeby wysiwtlilo mi sie normalne a nie zakodowane to co mam zrobic?

Nic nie możesz zrobić. md5 to hashowanie a nie kodowanie ... jest tylko i wyłącznie jednostronne.

A co do zmiany hasła to we wszystkich szanujących serwisach zmiana hasła składa się z trzech kroków :
- podajesz stare hasło
- podajesz nowe hasło
- powtarzasz nowe hasło
czyli trzy pola input w formularzu

w skrypcie sprawdzasz czy md5(stare_haslo)==haslo_w_bazie && nowe_haslo==nowe_powtorzone_haslo

Jeżeli wszystko się zgadza robisz aktualizacje hasla .. czyli
  1. <?php
  2. $sql="update tabela set haslo='".md5(nowe_haslo)."'";
  3. ?>
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.