Angular 2 DomSanitizer:在不允许使用JavaScript

时间:2018-03-12 17:50:48

标签: angular xss

我有用户输入需要保存到后端并以HTML格式呈现给其他用户。它需要支持链接和CSS样式,但剥离JavaScript以避免XSS攻击。

考虑test = "<span style='color: red;'><strong>Test</strong></span><img src='#' onerror='alert(1)' hidden><script>alert(2)</script>"的测试输入值。如果我使用DomSanitizer中的bypassSecurityTrustHtml,它会保留所有内容,包括不安全的JavaScript:

this.sanitizer.bypassSecurityTrustHtml(test)
// returns "<span style='color: red;'><strong>Test</strong></span><img src='#' onerror='alert(1)' hidden><script>alert(2)</script>"

但是,如果我使用sanitize方法,它会取出JavaScript但也会删除CSS:

this.sanitizer.sanitize(SecurityContext.HTML, test);
// returns "<span><strong>Test</strong></span><img src="#" hidden="">alert(2)"

我是否仍然使用DomSanitizer保留HTML和CSS但删除JavaScript?或者我需要使用另一个库吗?

1 个答案:

答案 0 :(得分:2)

样式attrs是不安全的,所以如果你不信任你的用户110%,不要允许它们。您的应用程序只是最安全,因为它是最薄弱的环节。这可能是角度剥离它们的原因。如果你必须绕过这个,你需要另一个解决方案。

有许多方法可以使用样式进行xss,但考虑的事情很简单:

<a href="https://malicious.site" style="position:absolute;z-index:9999;top:0;left:0;bottom:0;right:0;opacity:0">You can't see me</a>