ホームページ >バックエンド開発 >PHPチュートリアル >php XSSセキュリティフィルタリングコード

php XSSセキュリティフィルタリングコード

WBOY
WBOYオリジナル
2016-07-25 08:43:101014ブラウズ
  1. function Remove_xss($val) {
  2. // 印刷できない文字をすべて削除します。 CR(0a)、LF(0b)、TAB(9) が許可されます
  3. // これにより、 などの一部の文字の再間隔が妨げられます
  4. // n、r、t による分割を処理する必要があることに注意してください一部の入力では*許可されている*ので後ほど
  5. //http://blog.qita.in
  6. $val = preg_replace('/([x00-x08,x0b-x0c,x0e-x19])/', '' , $val);
  7. // 直接の置換。これらは通常の文字であるため、ユーザーはこれらを必要としません
  8. // これにより、
  9. $search = 'abcdefghijklmnopqrstuvwxyz';
  10. $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  11. $search .= '1234567890!@#$%^&*()';
  12. $search .= '~`";:?+/={}[ ]-_|'\';
  13. for ($i = 0; $i < strlen($search); $i++) {
  14. // ;? ; と一致しますが、これはオプションです
  15. // 0{0,7 } は任意の埋め込みゼロと一致します。これはオプションで最大 8 文字までです
  16. // @ @ 16 進数の値を検索します
  17. $val = preg_replace('/(&#[xX]0{0,8}'.dechex( ord($search[$i])).';?)/i', $search[$i], $val); // ;
  18. 付き // @ @ 0{0,7} は '0' に一致します0 から 7 回
  19. $val = preg_replace('/(?{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // ;
  20. }
  21. // 残りの空白攻撃は t、n、r だけです
  22. $ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml'、'blink'、'link'、'style'、'script'、'embed'、'object'、'iframe'、'frame'、'frameset'、'ilayer'、'layer'、'bgsound ', 'title', 'base');
  23. $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');
  24. $ra = array_merge($ra1, $ra2);
  25. $found = true; // 前のラウンドで何かが置き換えられている限り置き換え続けます
  26. while ($found == true) {
  27. $val_before = $val;
  28. for ($i = 0; $i < sizeof($ra); $i++) {
  29. $pattern = '/';
  30. for ($j = 0; $j < strlen($ra[$i]); $j++) {
  31. if ($j > 0) {
  32. $pattern .= '(';
  33. $pattern .= '(&#[xX]0{0,8}([9ab]);)';
  34. $pattern .= '|';
  35. $pattern .= '|(?{ 0,8}([9|10|13]);)';
  36. $pattern .= ')*';
  37. }
  38. $pattern .= $ra[$i][$j];
  39. }
  40. $pattern .= '/i';
  41. $replacement = substr($ra[$i], 0, 2).''.substr($ra[$i], 2); // <>を追加します。タグをナーフします
  42. $val = preg_replace($pattern, $replacement, $val); // 16 進タグを除外します
  43. if ($val_before == $val) {
  44. // 置換が行われなかったため、ループを終了します
  45. $found = false;
  46. }
  47. }
  48. }
  49. return $val;
  50. }
复制代

PHP、XSS


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。