javascript - 使用 innerHTML 防止脚本注入(inject)

标签 javascript innerhtml xss script-tag javascript-injection

我编写了一个微模板实用程序,它使用 innerHTML 根据用户输入(纯文本字符串或 html 字符串)在网页中注入(inject) html 片段。

我主要担心的是恶意脚本注入(inject)的风险。脚本可以通过脚本标签或内联事件(例如 img onload、div onmouseover)注入(inject)。

有没有办法清理 html 字符串以防止此类注入(inject)?另外,还有其他我应该注意的脚本注入(inject)方法吗?

最佳答案

如果您想要安全起见,您将在客户端和服务器上清理您的模板。不要编写自己的反 XSS 库,因为恶意用户一定会知道您没有考虑到的漏洞;细微差别太多,除非您是 XSS 专家,否则您一定会错过一个。

在客户端,Google Caja有一个很好的HTML sanitization utility这将对 HTML 字符串执行强大的清理,清除恶意属性或其他恶意用户可以做坏事的区域,例如通过注入(inject) script 标签进行 XSS 攻击。它们还清除属性和各种其他 XSS 注入(inject)点(例如 objectapplet 标记),因此您可以感到相当安全。

虽然您应该在服务器上进行清理以防止恶意用户简单地禁用 javascript 或覆盖 Caja 的清理程序,但您可以使用 Caja 来清理输入和输出以尝试尽可能多地捕获。

关于javascript - 使用 innerHTML 防止脚本注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887913/

相关文章:

javascript - React 支持 fullscreenchange 事件吗?

javascript - 有没有办法只替换页面上所有元素的innerText?

security - 将Smarty模板中的字符串替换为html标签

unicode - 在经典 ASP 中过滤编码的 XSS

javascript - 定位 ng-repeat 中使用 orderBy 的下一个项目

JavaScript:将表达式转换为字符串

javascript - 可观察对象是否发出 get 请求?

javascript - 如何将一个元素的outerHTML显示为另一个元素的内容?

javascript - 无法访问可排序列表中子元素的innerHTML

c# - 如何使用反 xss 攻击清理 web api 中的输入数据