XSS (Cross Site Scripting) Açığı - Zeynalli Web Studio

XSS (Cross Site Scripting) açığı

XSS (Cross Site Scripting) açığı

XSS, "Cross Site Scripting"  deyə adlanır.Zəifliyin səbəbi, GET POST dəyərlərini filtir etməməyimiz, yəni formalardan gələn məlumatları filtir etmədən emal etməyimizdir.

XSS zəifliyindən necə qorunaram?
Əvvəlcə PHP-də müəyyənləşdirilən strip_tags,trim,htmlspecialchars funksiyaları barədə sizə məlumat verim və birbaşa nümunə ilə izah edim.

*strip_tags - Gələn məlumatlarımızı strip_tags filtirindən keçirərək html etiketlərini silə bilərik.
*htmlspecialchars - Daxil olan yazı və ya mətni htmlspecialchars ilə filtirindən keçirsək HTML  kodlar mətin kimi yazacaq.
*trim - Gələn məlumatlarımızda olan boşluqları ləğv edir.

 <body>  
 <form method="POST">  
 <input type="email" name="e-mail">  
 <input type="text" name="ad_soyad">  
 <input type="submit" name="Göndər">  
 </form>  
 </body>  
 <?php   
 // Qəbul edilən dəyəri "strip_tags" funskiyası ilə zərərli kodlardan təmizləyirik.  
 // Məllumat email olduğu üçün boşluq istifadə olsunmasın deyə "trim" funsiyasinda istifadə etdik.  
 $email=strip_tags(trim($_POST['e-mail']));   
 // Qəbul edilən dəyəri "strip_tags" funskiyası ilə zərərli kodlardan təmizləyirik.  
 $adSoyad=strip_tags($_POST['ad_soyad']);  
 ?>  


Ən zəmanətli metod çox uğurlu bir funksiya Clean funksiyasıdır.
Eyni zamanda, SQL Enjeksiyon zəifliklərinə qarşı müəyyən bir ölçü götürür, ancaq bu, öz-özünə kifayət deyil. XSS üçün, 99.9% təhlükəsizlik təmin etdiyini söyləyə bilərəm.

 <?php   
 function clean($data)  
 {  
 $data = str_replace(array('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;gt;'), $data);  
 $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data);  
 $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data);  
 $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8');  
 $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data);  
 $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data);  
 $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data);  
 $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data);  
 $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data);  
 $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data);  
 $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data);  
 $data = preg_replace('#</*\w+:\w[^>]*+>#i', '', $data);  
 do  
 {  
   $old_data = $data;  
   $data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i', '', $data);  
 }  
 while ($old_data !== $data);  
 return $data;  
 }  
 // İstifadə qaydası.Gələn POST və ya GET dəyərini "clean" funskiyasının içərisinə daxil edirik.  
 $adSoyad = clean($_POST['ad_soyad']);  
  ?>  

0 comments for "XSS (Cross Site Scripting) açığı"

write a reply

Your e-mail address will not be published in the comments and you will be notified when your feedback is answered.