首页 > 开发 > PHP > 正文

php实现XSS安全过滤的方法

2024-05-04 23:38:17
字体:
来源:转载
供稿:网友

这篇文章主要介绍了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. // now the only remaining whitespace attacks are /t, /n, and /r 
  20. $ra1 = array('javascript''vbscript''expression''applet''meta''xml''blink''link''style''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base'); 
  21. $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'); 
  22. $ra = array_merge($ra1$ra2); 
  23. $found = true; // keep replacing as long as the previous round replaced something 
  24. while ($found == true) { 
  25. $val_before = $val
  26. for ($i = 0; $i < sizeof($ra); $i++) { 
  27. $pattern = '/'
  28. for ($j = 0; $j < strlen($ra[$i]); $j++) { 
  29. if ($j > 0) { 
  30. $pattern .= '('
  31. $pattern .= '(&#[xX]0{0,8}([9ab]);)'
  32. $pattern .= '|'
  33. $pattern .= '|(�{0,8}([9|10|13]);)'
  34. $pattern .= ')*'
  35. $pattern .= $ra[$i][$j]; 
  36. $pattern .= '/i'
  37. $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag 
  38. $val = preg_replace($pattern$replacement$val); // filter out the hex tags 
  39. if ($val_before == $val) { 
  40. // no replacements were made, so exit the loop 
  41. $found = false; 
  42. return $val

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表