Protectia xss

Post Title

       Atacurile xss sunt printre cele mai intalnite in "lumea" web, majoritatea programatorilor incepatori le ignora mergand direct la protectia sql injection , insa atacurile xss sunt o problema deoarece se pot fura cookie, daca ai cookie poti fi acea persoana, chiar daca exista protectie csrf prin xss se poate trece de ea. PHP-ul ne pune la dispozitie functii care sa ne ajute gen strip_tags()  htmlentities() , filter_var() mai sunt si altele dar pe astea o sa vi le prezint astazi. mai jos o sa va prezint o functie ce o folosesc eu pentru protectia xss

  1.  
  2. <?php
  3. /**
  4.  * Protejeaza de atacuri xss
  5.  * @param type string $str - stringul care trebuie protejat de xss
  6.  * @param type string $allowable_tags - tagurile pe care nu le va elimina, exemplu <b>
  7.  */
  8. function strip_xss($str,$allowable_tags=false){
  9. //daca nu sa setat tag sa ramana
  10. if(!$allowable_tags){
  11. //facem strip_tags
  12. $rez = strip_tags($str);
  13. }
  14. //daca sa setat tag care sa nu fie eliminat
  15. else{
  16. //facem strip_tags fara a elimina tagul(rile) dorit
  17. $rez = strip_tags($str,$allowable_tags);
  18. }
  19.  
  20. //daca se introduce javascript:alert() in input
  21. if(stripos($rez, "javascript:") !== false) {
  22. //eliminam javascript:
  23. $result = str_replace("javascript:","", htmlentities($rez, ENT_QUOTES,'utf-8'));
  24.  
  25. }
  26. //altfel
  27. else {
  28. //pentru " onchange="alert(document.cookie); etc
  29. $result = htmlentities($rez, ENT_QUOTES,'utf-8');
  30. }
  31.  
  32. return $result;
  33. }
  34. ?>

 

Nu va recomand sa folositi functia array_map() pentru a aplicata functia pe array-ul $_POST deoarece este posibil ca in anumite cazuri sa nu aveti nevoie de  filtrare xss fie valorile sunt numere fie ca datele primite trebuie sa fie netransformate, asa ca ar fi ok daca ati folosi functia la preluarea datelor din formular.

 

Ca un caz extrem se poate folosi $_POST=array_map('strip_xss',$_POST) pentru a va proteja de xss.

 

Functia de mai sus merge pe versiunile  >= 4 de php , php v 5 ne aduce functia filter_var care este un avantaj in filtrarea datelor

 

ecemplu de folosire a functiei filter_var

  1.  
  2. <?php
  3. $date['user'] = filter_var($_POST['user'], FILTER_SANITIZE_STRING);
  4. ?>

 

Sper sa va fie de folos ce am scris mai sus, va rog sa lasati comentariu in caz ca nu stiti ceva sau nu intelege-ti

 

Acest tutorial nu poate fi copiat sau instrinat (nici macar partial) decat cu acordul meu, altfel se incalca legea privind drepturile de autor pe internet

 

PS: strip_tags nu este suficiend pentru a elimina atacurile xss , este suficient in cazul in care dupa submit nu se pastreaza datele in value daca datele de completare ale formularului au fost introduse gresit.

Autor articol

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

Comentarii

Comentariu adaugat de marian
Prepare statement este pentru protectia sqli, strip_tags il folosesti mai mult pentru eliminarea continutului inutil care il poate trimite un utilizator. Foloseste filter_var($_POST['user'], FILTER_SANITIZE_STRING); pentru protectia xss 
go to page top marian | 2016-07-11
Comentariu adaugat de Vlăduț
Dacă fac prepared statements, mai am nevoie de strip_tags?
go to page top Vlăduț | 2016-07-10

Exista 2 comentarii   

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