在PHP中避免使用XSS

时间:2012-09-07 11:00:54

标签: php xss

  

可能重复:
  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("&amp;","&",$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;
}

但它起作用了。请帮帮我

2 个答案:

答案 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/