新‧夢想
跳到主文
部落格全站分類:
不設分類
相簿
部落格
留言
名片
Jun
24
Tue
2008
21:28
過濾XSS的function
過濾XSS的function
<br />
function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as
// 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
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i // ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace('/([xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,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 $pattern = '/';
for ($j = 0; $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); // 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;
}
?><br />
原始網站: http://quickwired.com/smallprojects/php_xss_filter_function.php
全站熱搜
創作者介紹
kevin0523
新‧夢想
kevin0523 發表在
痞客邦
留言
(0)
人氣(
)
E-mail轉寄
留言列表
發表留言
月曆
«
二月 2025
»
日
一
二
三
四
五
六
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
近期文章
最新迴響
新聞交換(RSS)
誰來我家
參觀人氣
本日人氣:
累積人氣:
熱門文章
文章彙整
文章彙整
2009 三月 (1)
2009 二月 (1)
2009 一月 (1)
2008 十一月 (1)
2008 八月 (1)
2008 七月 (1)
2008 六月 (8)
2008 五月 (14)
2008 四月 (3)
2008 二月 (32)
2008 一月 (6)
2007 十二月 (7)
2007 十一月 (5)
2007 十月 (41)
所有文章列表
文章分類
程式設計 (8)
Google_API - Google Map (3)
JSP (0)
FLASH AS (0)
PHP (32)
Perl (0)
AJAX (0)
Javascript (39)
Javascript-Jquery (1)
網頁設計 (2)
精選網站 (0)
CSS (0)
系統相關 (8)
Linux (8)
Linux - 指令 (0)
Linux - 防火牆 (0)
Linux - Apache (8)
Linux - DNS (0)
FMS + FFMpeg (5)
MySQL (21)
Mysql (1)
資訊安全 (0)
網站企劃 (1)
網站規劃 (1)
Google_API - Google Chart API (1)
網路密技 (1)
未分類文章 (1)
我的連結
QR Code
關閉視窗
留言列表