2016-11-04 65 views
3

我读过AngularJs使用某种沙盒来防止在{{}}大括号内运行任意表达式。根据Angular版本,有几个关于如何转义该沙箱的示例。例如,在版本1.4.0 - 1.4.9中,如果我将它粘贴到代码中,则以下代码段可用。Angularjs沙箱逃逸有什么含义?

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

我不明白的是为什么它是如此重要?上面的例子只有在表达式已经在html中时才起作用。我为什么要转义沙盒,而不是使用常规XSS注入<'script>?

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

这个沙箱逃脱的东西是如何与$ sanitize和$ sce关联的?

回答

3

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

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

更新: 你可以看到沙箱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的沙箱是一件“大不了的事”。

+0

我知道$ sce和$ sanitize之间的区别。我不知道的是,沙箱旁路是否可以用来逃避消毒或以任何其他方式破坏安全。如果不是,那么我是否应该担心呢?我在问,因为我已经阅读了[很少有文章](http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html),但我仍然不愿意,不要在实践中使用它。 – JakubM