Protectia injectari sql in baza de date

Post Title

       Sql injection este o vulnerabilitate des intalnita printre incepatori, deoarece nu sunt filtrate datele primite de la utilizatori scriptului.

In cateva randuri o sa explic vulnerabilitatea sql injection: Sa zicem ca avem un formular care cere un utilizator si o parola pentru acces la o anumita zona, dupa preluarea dateleor interogarea devine astfel.

  1.  
  2. $query="SELECT * FROM access WHERE username='{$_POST['username']}' AND password='{$_POST['password']}'";

 

insa daca un raufacator ar pune in campul password 'OR 1==1 -- , va dati seama ca daca userul e corect ( de exemplul userul adminului ) aceasta interogare este considerata corecta si raufacatorul va avea admin, dar prin sql injection se poate pune shell pe host, backdoor,spam si multe alte date compromise, ceea ce nu ar fi prea prumos pentru site-ul si securitatea datelor. 

 

In cazul ca utilizati mysql atunci functia care va ajuta sa "scapati" de sql injection este mysql_real_escape_string()

 

Am scris o functie care va ajuta sa filtrati un array sau un string

  1.  
  2. <?php
  3. function strip_sqli($date){
  4.  
  5. if(is_array($date)){
  6. $strip = array_map('stripslashes',$date);
  7. $date_f = array_map('mysql_real_escape_string',$strip);
  8. }else{
  9. $date_f = array_map('mysql_real_escape_string',$date);
  10. }
  11. } else {
  12. } else {
  13. $date_f = mysql_real_escape_string($date);
  14. }
  15. }
  16. return $date_f;
  17. }
  18. ?>

 

Functia se aplica fie unui array fie unui string, daca nu stiti la ce foloseste array_map, gasiti aici in tutorialele trecute, iar functia get_magic_quotes_gpc() verifica daca in php.ini magic quotes (ghilimele magice) sunt puse pe on.

 

Functia se poate folosi astfel

  1.  
  2. $date=strip($_POST);
  3. //sau
  4. $date=strip($_POST['camp']);

 

Daca folositi postgresql atunci functia de mai sus se poate rescrie inlocuind mysql_real_escape_string cu pg_escape_string()

Eu folosesc doar aceste doua sgbd-uri dar puteti aprofunda si o sa gasiti solutii pentru toate sgbd-urile.

De mentionat este faptul ca pentru inputurile,get-urile numerice se foloseste is_numeric si intval,floatval

Daca observati o greseala in functie va rog sa o semnalati, am scris functia direct aici, fara a o testa, desi sunt sigur ca functioneaza, e posibil sa fi gresit. Nu uitati mai este un tutorial despre Protectia xss , astfel mergem spre o protectie cat mai buna a scripturilor noastre, bafta pana data viitoare

Autor articol

Ştiinţa fără religie este şchioapă, religia fără ştiinţă este oarbă (Albert Einstein)

Articolul anterior


Acest articol nu este comentat, fii primul care o face

Trebuie sa fii logat sa poti lasa un comentariu Autentificare Inregistrare Logare cu Facebook
top