我编写了一个微模板实用程序,它使用 innerHTML 根据用户输入(纯文本字符串或 html 字符串)在网页中注入 html 片段。
我主要担心的是恶意脚本注入的风险。脚本可以通过脚本标签或内联事件(例如 img onload、div onmouseover)注入。
有没有办法清理 html 字符串以防止此类注入?另外,还有其他我应该注意的脚本注入方法吗?
我编写了一个微模板实用程序,它使用 innerHTML 根据用户输入(纯文本字符串或 html 字符串)在网页中注入 html 片段。
我主要担心的是恶意脚本注入的风险。脚本可以通过脚本标签或内联事件(例如 img onload、div onmouseover)注入。
有没有办法清理 html 字符串以防止此类注入?另外,还有其他我应该注意的脚本注入方法吗?
如果您想安全,您将在客户端和服务器上清理您的模板。不要编写自己的反 XSS 库,因为恶意用户一定会知道您没有考虑到的漏洞;细微差别太多了,除非您是 XSS 专家,否则您一定会错过任何一个。
在客户端,Google Caja有一个非常不错的HTML 清理实用程序,它可以对 HTML 字符串执行强大的清理,清理恶意属性或其他讨厌的用户可以做讨厌的事情的区域,例如通过注入script
标签的 XSS 攻击。它们还清理属性和各种其他 XSS 注入点(例如,object
和applet
标签),因此您可以感到相当安全。
虽然您应该在服务器上进行清理以防止恶意用户简单地禁用 javascript 或覆盖 Caja 的清理程序,但您可以使用 Caja 清理输入和输出以尽可能多地捕获。