【发布时间】:2018-03-12 17:50:47
【问题描述】:
我有用户输入需要保存到后端并作为 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?还是我需要使用另一个库?
【问题讨论】: