人们正在攻击我的过滤器

时间:2011-01-23 21:40:34

标签: php xss

我正在使用正则表达式并阻止单词document | window | alert | onmouseover | onclick以防止xss,并且人们似乎只能通过键入doc \ ument来绕过它,我该如何解决这个问题?

谢谢!

-

编辑:如何阻止xss服务器端?也许拒绝服务任何包含GET变量中的东西的文件?

4 个答案:

答案 0 :(得分:4)

显然,你必须提供一些有意义的细节,以便为你手头的问题得到任何认真的答案。

正如@David Dorward所说,最简单的选择是逃避所有HTML实体。这会禁用所有HTML,但您不必处理打击XSS攻击的困境。

如果您需要支持HTML,请考虑使用预制的Anti-XSS过滤器,如HTML purifier,它可以可靠地阻止此类尝试。

  

HTML Purifier是一个用PHP编写的符合标准的HTML过滤器库。 HTML Purifier不仅会删除所有恶意代码(更好地称为XSS),并且具有经过全面审核,安全且允许的白名单,还可以确保您的文档符合标准,只有通过全面了解W3C的规范才能实现。

答案 1 :(得分:1)

简单的选项是禁止任何HTML并将所有&<>转换为各自的实体(&amp;&lt;和{ {1}})。

更复杂的方法是通过HTML解析器运行输入,将白名单应用于元素和属性名称,然后将其序列化为HTML。

答案 2 :(得分:0)

这个系统是否至关重要?

如果是这样,请立即将其关闭并聘请安全顾问为您保护。

安全性是一个问题。不要以为你第一次能做对,因为你不会。

如果这只是一个你玩的系统?

尝试通过过滤特定单词来阻止XSS是一场失败的战斗。如果您不想插入HTML,只需HTML编码所有内容。如果你确实想要一些HTML,那么你需要解析 HTML,确保它有效并且不会破坏页面,只有这样才能确保它没有不包含任何您不想要的元素或属性。

答案 3 :(得分:0)

我有同样的问题,昨天才问过这个问题。我个人而不是删除标签,我创建了一个我想要的所有标签的列表。使用PHP命令strip_tags是我现在使用的。

strip_tags(string $ str [,string $ allowable_tags])

使用此命令,您只需将其应用于此过滤器即可。

输入的文字:

<b>Hi</b><malicious tag>

strip_tags("<b>Hi</b><malicious tag>","<b>")

这将输出<b>Hi</b>