0

我有一个名为 xss 的函数,它返回清理后的文本。我想知道,是否足够,或者我那里有一些错误

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

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

4

1 回答 1

0

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

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

或者他可以使用';' 如果那里有任何反映,则在脚本中开始一个新行。尝试涵盖所有可能有问题的字符。

于 2013-08-13T18:21:36.950 回答