我有自己的函数xss,它返回已清理的文本。我想知道,如果这是足够的,或者我有一些错误那里
function xss($str,$html = false)
{
if($html){
//HTML Purfier called here
}else{
return str_replace(array('&','"',"'",'<','>'), array('&','"',''','<','>'), $str);
}
}
我不想使用strip_tag,因为它会删除所有标签。我想离开它们,但替换为保存实体。替换这些字符时是否保存?
您应该考虑一些可能有问题的其他字符。例如":"one_answers";"。想象一下,您返回标记属性(如href)中的文本,然后攻击者可以使用类似"http://yoursite.com/blah/?parameter=javascript:alert(String.fromCharCode(65))',这将反映为:
...
<a href="javascript:alert(String.fromCharCode(65))">
...
或者他可以用";"如果脚本中反映了任何内容,则在其中开始一行新行。尽量覆盖所有可能存在问题的字符。