2009-10-27 150 views

回答

3

不幸的不是。如果攻击者真的在尝试,实际上有很多方法可以潜入该正则表达式。使用现代浏览器,该正则表达式应该做得很好,但并不完全。例如,沿此线的东西可以打开的JavaScript但没有明确说脚本或JavaScript

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

退房here(有些过时,但跨获取点)和here更多的例子

+0

打算提一下,但上面链接到http://www.owasp.org/index.php/XSS%5F%28Cross%5FSite%5FScripting%29%5FPrevention%5FCheat%5FSheet做得很好 - 即使CSS可以成为XSS的来源。这么多的攻击媒介。 – 2009-10-27 01:11:45

+0

是的,很好的链接。 – 2009-10-27 01:19:16

+0

感谢您的来源和简单的例子。 – bucabay 2009-10-27 01:25:41

0

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

Hahahahahahahahahaha。

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

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

当然,这只适用于您实际上故意接受HTML输入并且想限制其潜在危害。如果情况是您接受文本,但忘记在出口​​时正确转义文本,则需要修复该HTML转义,因为没有大量的输入嗅探将修复输出问题。

这就是为什么mod_security完全是伪造的。它通过捕捉一些最基本的注入技巧,让所有其他东西通向易受攻击的应用程序,从而为您提供改进安全性的幻觉。最终,它不会阻止你被黑客入侵,但是你添加的注入签名越多,它就越会拒绝并混淆合法请求。例如,它可能会阻止我输入此消息,因为它包含字符串<script>

+0

大声笑..也许你是正则表达式只是不达标:D我明白你的观点。 – bucabay 2009-10-28 07:51:39

0

其他受访者是正确的:有许多情况下可能发生注射。请记住,解决方案必须考虑可能发生注入的许多上下文。黑名单(或“已知不好”)过滤方法将无法正常工作,因为它们会受到攻击,这些攻击使用意外的字符集编码注入,创造性地使用空白以及其他技术。欲了解更多信息,请参阅OWASP DOM Based XSS。该页面的链接教育'问题'方面。

至于解决方案,请考虑我们刚发布的OWASP XSS DOM Prevention Cheat Sheet。在备忘单中引用了几个工具包,可帮助您实施转义或编码策略。可能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"/> 

注意它包括自动转义为背景也是一个自定义标签,允许非转义输出,在你的页面的情况下,特殊元素/应用程序将通过车被打破漂白编码机制。