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

WBOY
リリース: 2016-07-25 08:43:10
オリジナル
965 人が閲覧しました
  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


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!