2013-08-07 25 views
0

我有我自己的称为xss的函数,它返回已清理的文本。我想知道,如果它是不够的,还是我有以纯文本和HTML格式过滤XSS

function xss($str,$html = false) 
{ 
    if($html){ 
    //HTML Purfier called here 
    }else{ 
    return str_replace(array('&','"',"'",'<','>'), array('&amp;','&quot;','&#39;','&lt;','&gt;'), $str); 
    } 
} 

一些bug,我不希望使用strip_tags,因为它删除所有标签。我想离开它们,但是替换为保存实体。替换这些字符时会保存吗?

+1

对于第二部分:http://php.net/manual/en/function.htmlspecialchars.php –

+0

谢谢,但它会够了,对不对?我不确定 – Arxeiss

回答

0

您应该考虑可能存在问题的其他字符。例如':'和';'。试想一下,你返回一个标签属性(如一个href)内的文本,那么攻击者可以使用类似“http://yoursite.com/blah/?parameter=javascript:alert(String.fromCharCode(65))”这将反映为:

... 
<a href="javascript:alert(String.fromCharCode(65))"> 
... 

或者他可以用“;”如果有任何事情在那里反映出来,在脚本内部开始一个新行。尝试涵盖所有可能存在问题的字符。