php如何防xssp预防xss,php安全字段和防止XSS跨站脚本攻击过滤函数

function escape($string) {

global $_POST;

$search = array (

‘/

‘/>/i‘,

‘/\">/i‘,

‘/\bunion\b/i‘,

‘/load_file(\s*(\/\*.*\*\/)?\s*)+\(/i‘,

‘/into(\s*(\/\*.*\*\/)?\s*)+outfile/i‘,

‘/\bor\b/i‘,

‘/\]*?)\>/si‘,

‘/\]*?)\>/si‘,

‘/\]*?)\>/si‘

);

$replace = array (

‘>‘,

‘">‘,

‘union ‘,

‘load_file (‘,

‘into outfile‘,

‘or ‘,

‘‘,

‘‘,

‘‘

);

if (is_array ( $string )) {

$key = array_keys ( $string );

$size = sizeof ( $key );

for($i = 0; $i < $size; $i ++) {

$string [$key [$i]] = escape ( $string [$key [$i]] );

}

} else {

if (! $_POST [‘stats_code‘] && ! $_POST [‘ad_type_code_content‘]) {

$string = str_replace ( array (

‘\n‘,

‘\r‘

), array (

chr ( 10 ),

chr ( 13 )

), preg_replace ( $search, $replace, $string ) );

$string = remove_xss ( $string );

} else {

$string = $string;

}

}

return $string;

}

function remove_xss($val) {

$val = preg_replace ( ‘/([\x00-\x08\x0b-\x0c\x0e-\x19])/‘, ‘‘, $val );

$search = ‘abcdefghijklmnopqrstuvwxyz‘;

$search .= ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘;

$search .= ‘1234567890!@#$%^&*()‘;

$search .= ‘~`";:?+/={}[]-_|\‘\\‘;

for($i = 0; $i < strlen ( $search ); $i ++) {

$val = preg_replace ( ‘/([xX]0{0,8}‘ . dechex ( ord ( $search [$i] ) ) . ‘;?)/i‘, $search [$i], $val );

$val = preg_replace ( ‘/(?{0,8}‘ . ord ( $search [$i] ) . ‘;?)/‘, $search [$i], $val );

}

$ra1 = array (

‘javascript‘,

‘vbscript‘,

‘expression‘,

‘applet‘,

‘meta‘,

‘xml‘,

‘blink‘,

‘script‘,

‘object‘,

‘iframe‘,

‘frame‘,

‘frameset‘,

‘ilayer‘,

‘bgsound‘

);

$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;

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]0{0,8}([9ab]);)‘;

$pattern .= ‘|‘;

$pattern .= ‘|(?{0,8}([9|10|13]);)‘;

$pattern .= ‘)*‘;

}

$pattern .= $ra [$i] [$j];

}

$pattern .= ‘/i‘;

$replacement = substr ( $ra [$i], 0, 2 ) . ‘ ‘ . substr ( $ra [$i], 2 );

$val = preg_replace ( $pattern, $replacement, $val );

if ($val_before == $val) {

$found = false;

}

}

}

return $val;

}

原文:https://www.cnblogs.com/68xi/p/12038708.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值