这个正则表达式足以在将HTML嵌入DOM时捕获所有跨站点脚本尝试。例如:例如document.write()

(javascript:|<\s*script.*?\s*>)

本文档中提到了modsecurity.com http://www.modsecurity.org/documentation/Ajax_Fingerprinting_and_Filtering_with_ModSecurity_2.0.pdf

是否会捕获所有<!> lt; \ s 脚本。?\ s * <!> gt;例如UTF-8中的变体?

有帮助吗?

解决方案

不幸的是没有。如果攻击者真的在尝试,实际上有很多方法可以偷偷跑过那个正则表达式。使用现代浏览器,正则表达式应该做得很好,但并非详尽无遗。例如,根据这一点,可以打开javascript而无需明确说出脚本或javascript

<img src="blah.jpg" alt="" onmousedown="alert('a')" />

查看此处(有点过时,但得到了重点)和此处了解更多示例

其他提示

  

这个正则表达式是否足以捕获所有跨站点脚本尝试

Hahahahahahahahahaha。

对不起。但是真的......不,这甚至都不是冰山一角。

Daniel提到了另一种注入脚本的方法,但实际上有数百种。使用简单的正则表达式来清理HTML是完全不可能的。唯一的方法(即使这样也不是微不足道的)是正确地解析HTML,抛弃所有格式错误的序列和元素/属性名称,除了一些已知安全的名称。

当然,这仅适用于您实际上故意接受HTML输入并希望限制其潜在危害的情况。如果情况是你正在接受文本但忘记在出路时正确地逃避它,你需要修复HTML转义,因为没有多少输入嗅探会解决输出问题。

这就是 mod_security完全虚假的原因。它通过捕获一些最基本的注入技术,同时让其他所有内容通过易受攻击的应用程序,为您提供改善安全性的假象。最终,它不会阻止您被黑客入侵,但是您添加的注入签名越多,它就会越拒绝并弄乱合法请求。例如,它可能会阻止我输入此消息,因为它包含字符串<script>

其他受访者是对的:有很多情况可能会发生注射。请记住,解决方案必须考虑可以发生注入的许多上下文。黑名单(或<!>“已知的错误<!>”)过滤方法不起作用,因为它们成为使用意外字符集,创造性使用空白和其他技术编码注入的攻击的牺牲品。有关详细信息,请参阅基于OWASP DOM的XSS 。该页面的链接教育了“问题”方面。

至于解决方案,请考虑我们的 OWASP XSS DOM预防作弊表刚刚出版。备忘单中引用了几个工具包,可帮助您实现转义或编码策略。可能 MY FAVORITE 确保服务器编写的客户端代码被编码和适当转义的方法 JXT 。从其谷歌代码页:

<!-- Automatically escaped content -->
Hello ${user.getName()}!

<!-- Example tag with 3 different contextual encoding requirements -->
<img src="/profile-photo?user=${user.getId()}"
     alt="Photo of ${user.getName()}"
     onclick="openProfile('${user.getId()}')" />

<!-- Override the default escape, rare, but occasionally needed: -->
<jxt:out value="${user.getProfileHtml()}" escape="none"/>

请注意,这包括自动转义上下文,但也包含允许未转义输出的自定义标记,以防您的页面/应用的特殊元素被购物车blanch编码制度破坏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top