Angularjs沙箱逃逸的含义是什么?

时间:2016-11-04 13:17:16

标签: angularjs security

我已经读过AngularJs使用某种沙箱来阻止在{{}}大括号内运行任意表达式。有几个关于如何逃离沙箱的例子,取决于Angular版本。例如,在版本1.4.0 - 1.4.9中,如果我将其粘贴到代码中,则以下代码段可以正常工作。

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}

我不明白为什么它是如此重要?上面的示例仅在表达式已经在html中时才有效。为什么我要转义沙箱而不是仅仅注入<'脚本>使用常规XSS?

{{<script>alert(1)</script>}}

这个沙箱逃脱的事情与$ sanitize和$ sce有什么关系?

1 个答案:

答案 0 :(得分:3)

关于$ sce和$ sanitize之间差异的一个很好的答案可以在这里找到:When to use $sanitize and $sce ? What's differences between them?我建议您也阅读这些文件。

你也有一些很好的例子:https://docs.angularjs.org/api/ngSanitize/service/ $ sanitize

更新: 你可以在AngualrJS上看到这个有趣的博客关于沙箱逃逸。 http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html 最后有一些漏洞利用的例子,也包括AngularJS 1.5X版本。

我也发现这篇文章,可能会对沙盒和消毒有更多的了解。 https://www.cigital.com/blog/angularjs-sandbox/

具体来说,当混合服务器端和clide模板(服务器端呈现)时,所有这些XSS攻击都更相关。正如文章中所提到的,“用于防止XSS的服务器端技术编码特殊字符,如尖括号,但不会编码指示AngularJS表达式的花括号”,这可能就是为什么放置标签无济于事,并找到一种方法来打破Angular的沙盒是一个“大问题”。