我编写了一个微模板实用程序,它使用 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)点(例如 object
和 applet
标记),因此您可以感到相当安全。
虽然您应该在服务器上进行清理以防止恶意用户简单地禁用 javascript 或覆盖 Caja 的清理程序,但您可以使用 Caja 来清理输入和输出以尝试尽可能多地捕获。
关于javascript - 使用 innerHTML 防止脚本注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10887913/