以纯文本和HTML格式过滤XSS

时间:2013-08-07 07:45:24

标签: php xss

我有自己的函数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,因为它会删除所有代码。我想留下它们,但由保存实体替换。替换这些字符时会保存吗?

1 个答案:

答案 0 :(得分:0)

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

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

或者他可以使用';'如果有任何反映在那里,在脚本内开始一个新行。尽量覆盖所有可能存在问题的角色。