رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
جلوگیری از حملات XSS (تزریق کد)
#1
[ جلوگیری از حملات XSS (تزریق کد) ]

توضیح کد:
تزریق کد عبارت‌ است از بهره‌جویی از باگ‌های یک سامانهٔ رایانه‌ای که منجر به اجرایِ کد‌های ناخواسته در سامانه می‌شود. رخنه‌گر با استفاده از حملات تزریق می‌تواند مسیر برنامه را به سمتی که می‌خواهد تغییر دهد.
یکی از زمینه‌سازهای رایج برای حمله‌های تزریق کد اعتماد نابجای توسعه‌دهندگان نرم‌افزارها به ورودی کاربران است که در پی آن حمله‌کننده با سوءاستفاده از این موضوع کد خود را در کنار ورودی کاربر جاسازی می‌کند.

کد پی‌اچ‌پی:
function xss_clean($data)
{
 
       // Fix &entity\n;
 
       $data str_replace(array('&amp;','<','>'), 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($dataENT_COMPAT'UTF-8');

 
       // Remove any attribute starting with "on" or xmlns
 
       $data preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu''$1>'$data);

 
       // Remove javascript: and vbscript: protocols
 
       $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);

 
       // Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
 
       $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);

 
       // Remove namespaced elements (we do not need them)
 
       $data preg_replace('#</*\w+:\w[^>]*+>#i'''$data);

 
       do
        
{
 
               // Remove really unwanted tags
 
               $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);

 
       // we are done...
 
       return $data;


نحوه استفاده
:

ابتدا تابع بالا رو در فایل قرار میدهید و سپس بصورت زیر فراخوانی میکنید:

کد پی‌اچ‌پی:
$data "Testing for <script>alert(document.cookie);</script> Crosssite scripting";
echo 
xss_clean($data); 
[عکس: home-icon.png]
پاسخ
 سپاس شده توسط Bahamin ، MrAhmad
#2
سلام
پیشنهاد میکنم به کد ها استایل direction:ltr رو بدید تا چپ به راست نشون داده بشن.
الان اینطوری راست به چپ آمدن زیاد قشنگ نیستن.
پاسخ
 سپاس شده توسط Milad ، Bahamin ، MrAhmad
#3
البته به نظر من بهتره قطعه کد اسیب پذیر پیدا بشه و امن سازی بشه تا دیگه اسیب پذیریxss وجود نداشته باشه تا کدی تزریق بشه...البته هر روشی بایپس هم داره.منتهی بهتره که اصلا اسیب پذیری نباشه تا بخوایم جلوش رو بگیریم...
پاسخ
 سپاس شده توسط Milad




کاربران در حال بازدید این موضوع: 1 مهمان