我正在使用正则表达式并阻止单词document | window | alert | onmouseover | onclick以防止xss,并且人们似乎只能通过键入doc \ ument来绕过它,我该如何解决这个问题?
谢谢!
-
编辑:如何阻止xss服务器端?也许拒绝服务任何包含GET变量中的东西的文件?
答案 0 :(得分:4)
显然,你必须提供一些有意义的细节,以便为你手头的问题得到任何认真的答案。
正如@David Dorward所说,最简单的选择是逃避所有HTML实体。这会禁用所有HTML,但您不必处理打击XSS攻击的困境。
如果您需要支持HTML,请考虑使用预制的Anti-XSS过滤器,如HTML purifier,它可以可靠地阻止此类尝试。
HTML Purifier是一个用PHP编写的符合标准的HTML过滤器库。 HTML Purifier不仅会删除所有恶意代码(更好地称为XSS),并且具有经过全面审核,安全且允许的白名单,还可以确保您的文档符合标准,只有通过全面了解W3C的规范才能实现。
答案 1 :(得分:1)
简单的选项是禁止任何HTML并将所有&
,<
和>
转换为各自的实体(&
,<
和{ {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>
。