可能重复:
What are the best practices for avoiding xss attacks in a PHP site
我有一个php板,但它包含XSS安全漏洞。
如果我在IE6的url地址字段中插入以下XSS,
http://x.x.x.x/xe/?mid=notice&category='"--></style></script><script>alert(0x000640)</script>
(此处'"--></style></script><script>alert(0x000640)</script>
是XSS代码)
浏览器显示1600的警告消息(它将上述代码翻译为脚本)
为防止XSS,我插入了以下代码(if(preg_match('/"/',$target)) return true;
)
function _isHackedSrc($src) {
if(!$src) return false;
if($src) {
$target = trim($src);
if(preg_match('/(\s|(\&\#)|(script:))/i', $target)) return true;
if(preg_match('/data:/i', $target)) return true;
$url_info = parse_url($src);
$query = $url_info['query'];
if(!trim($query)) return false;
$query = str_replace("&","&",$query);
$queries = explode('&', $query);
$cnt = count($queries);
for($i=0;$i<$cnt;$i++) {
$tmp_str = strtolower(trim($queries[$i]));
$pos = strpos($tmp_str,'=');
if($pos === false) continue;
$key = strtolower(trim(substr($tmp_str, 0, $pos)));
$val = strtolower(trim(substr($tmp_str,$pos+1)));
if( ($key=='module'&&$val=='admin') || ($key=='act'&&preg_match('/admin/i',$val)) ) return true;
}
}
return false;
}
但它起作用了。请帮帮我
答案 0 :(得分:1)
不要尝试检查任何输入是否存在恶意内容 - 这种情况总是让你失败。
相反,您需要正确转义任何输入。对于HTML,正确的函数是htmlspecialchars()
。
答案 1 :(得分:-4)
试试这个:
function _isHackedSrc($src) {
$src=trim(strip_tags(addslashes($src)));
....
}
更多信息:http://r00tsecurity.org/forums/topic/9924-workaround-strip-tags-and-addslashes-in-the-xss/