分享php过滤XSS攻击的函数
php过滤XSS攻击的函数是什么呢?以下是小编分享php过滤XSS攻击的函数,就跟随小编一起去了解下吧,想了解更多相关信息请持续关注我们免费学习网!
以下函数:
过滤用户的`输入,保证输入是XSS安全的。
例子:
复制代码 代码示例:
<?php
/**
* 过滤XSS攻击
* edit: www.jbxue.com
*/
function RemoveXSS$val
// remove all non-printable characters. CR0a and LF0b and TAB9 are allowed
// this prevents some character re-spacing such as <java\0script>
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace'/[\x00-\x08,\x0b-\x0c,\x0e-\x19]/', '', $val;
// straight replacements, the user should never need these since they're normal characters
// this prevents like <IMG SRC=@avascript:alert'XSS'>
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*';
$search .= '~`";:?+/=[]-_|\'\\';
for $i = 0; $i < strlen$search; $i++
// ;? matches the ;, which is optional
// 00,7 matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace'/&#[xX]00,8'.dechexord$search[$i].';?/i', $search[$i], $val; // with a ;
// @ @ 00,7 matches '0' zero to seven times
$val = preg_replace'/?0,8'.ord$search[$i].';?/', $search[$i], $val; // with a ;
// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array'javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base';
$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';
$ra = array_merge$ra1, $ra2;
$found = true; // keep replacing as long as the previous round replaced something
while $found == true
$val_before = $val;
for $i = 0; $i < sizeof$ra; $i++
$pattern = '/';
for $j = 0; $j < strlen$ra[$i]; $j++
if $j > 0
$pattern .= '';
$pattern .= '&#[xX]00,8[9ab];';
$pattern .= '|';
$pattern .= '|?0,8[9|10|13];';
$pattern .= '*';
$pattern .= $ra[$i][$j];
$pattern .= '/i';
$replacement = substr$ra[$i], 0, 2.'<x>'.substr$ra[$i], 2; // add in <> to nerf the tag
$val = preg_replace$pattern, $replacement, $val; // filter out the hex tags
if $val_before == $val
// no replacements were made, so exit the loop
$found = false;
return $val;
?>