Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Protectie XSS
#1
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:


Quote: <?php
/**  
* Protejeaza de atacuri xss  
* @param type string $str - stringul care trebuie protejat de xss  
* @param type string $allowable_tags - tagurile pe care nu le va elimina, exemplu <b>
*/
function strip_xss($str,$allowable_tags=false){
//daca sa setat tag care sa nu fie eliminat  
if(!$allowable_tags){
     
//facem strip_tags fara a elimina tagul(rile) dorit        
$rez = strip_tags($str,$allowable_tags);  
//altfel
}
else{
//facem strip_tags        
$rez = strip_tags($str);  
}
//daca se introduce javascript:alert() in input  
if(stripos($rez, "javascript:") !== false) {
//eliminam javascript:      
 $result = str_replace("javascript:","", htmlentities($rez, ENT_QUOTES));  
//altfel  
}
else {  
//tranformama in entitati html, protectia este pusa pentru " onchange="alert(document.cookie); etc        
$result = htmlentities($rez, ENT_QUOTES);
 }
return
$result;
}
?>

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


exemplu de folosire a functiei filter_var


Quote: <?php  $date['user'] = filter_var($_POST['user'], FILTER_SANITIZE_STRING); ?>

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


Autor: mic_programator
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)