当前位置:首页 > PHP教程 > php高级应用 > 列表

php实现XSS安全过滤的方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-14 21:10:22 浏览: 评论:0 

这篇文章主要介绍了php实现XSS安全过滤的方法,实例分析了php针对XSS进行安全过滤的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了php实现XSS安全过滤的方法,分享给大家供大家参考,具体如下:

  1. function remove_xss($val) { 
  2.   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed 
  3.   // this prevents some character re-spacing such as <java\0script> 
  4.   // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs 
  5.   $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/'''$val); 
  6.   // straight replacements, the user should never need these since they're normal characters 
  7.   // this prevents like <IMG SRC=@avascript:alert('XSS')> 
  8.   $search = 'abcdefghijklmnopqrstuvwxyz'
  9.   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  10.   $search .= '1234567890!@#$%^&*()'
  11.   $search .= '~`";:?+/={}[]-_|\'\\'
  12.   for ($i = 0; $i < strlen($search); $i++) { 
  13.    // ;? matches the ;, which is optional 
  14.    // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars 
  15.    // @ @ search for the hex values 
  16.    $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i'$search[$i], $val); // with a ; 
  17.    // @ @ 0{0,7} matches '0' zero to seven times 
  18.    $val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/'$search[$i], $val); // with a ; 
  19.   } 
  20.   // now the only remaining whitespace attacks are \t, \n, and \r 
  21.   $ra1 = array('javascript''vbscript''expression''applet''meta''xml''blink''link''style''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base'); 
  22.   $ra2 = array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate''onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange''onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick''ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate''onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload''onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup''onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize''onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange''onselectstart''onstart''onstop''onsubmit''onunload'); 
  23.   $ra = array_merge($ra1$ra2); 
  24.   $found = true; // keep replacing as long as the previous round replaced something 
  25.   while ($found == true) { 
  26.    $val_before = $val
  27.    for ($i = 0; $i < sizeof($ra); $i++) { 
  28.      $pattern = '/'
  29.      for ($j = 0; $j < strlen($ra[$i]); $j++) { 
  30.       if ($j > 0) { 
  31.         $pattern .= '('
  32.         $pattern .= '(&#[xX]0{0,8}([9ab]);)'
  33.         $pattern .= '|'
  34.         $pattern .= '|(�{0,8}([9|10|13]);)'
  35.         $pattern .= ')*'
  36.       } 
  37.       $pattern .= $ra[$i][$j]; 
  38.      } 
  39.      $pattern .= '/i'
  40.      $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag 
  41.      $val = preg_replace($pattern$replacement$val); // filter out the hex tags 
  42.      if ($val_before == $val) { 
  43.       // no replacements were made, so exit the loop 
  44.       $found = false; 
  45.      } 
  46.    } 
  47.   } 
  48.   return $val

希望本文所述对大家的php程序设计有所帮助。

Tags: XSS安全过滤

分享到: