我正在使用JavaScript编写的一些页面应用程序,目前使用lodash。我想通过以下方式使用标准库来防止跨站点脚本(XSS):
1)转义所有不受信任的内容
2)根据目标CSS,HTML,HTMLAttribute JavaScript,JSON等编码输出
我已经看到了许多堆栈溢出答案,但它们没有在标准库中提供完整的规范化/编码解决方案,我可以编写静态测试以确保开发人员使用该库。
是否有esapi或类似的“轻”库,我只能用于JavaScript?
我见过OWASP Esapi和jQuery Encoder插件 https://github.com/chrisisbeef/jquery-encoder 和SalesForce编码器https://github.com/salesforce/secure-filters
此刻我只对标准化输入和编码输出感兴趣。 我也在寻找最新的,维护良好的,理想情况下不依赖于其他库。
有人建议使用最好的方法吗?
答案 0 :(得分:0)
是否正在使用任何模板框架? 理想情况下,您应该使用像React这样的框架,它默认处理编码。那么你所要做的就是确保不使用dagerouslySetInnerHTML(或安全使用)。
除非验证白名单,否则添加不受信任的CSS被视为不安全。 通过将数据分配给element.textContent或使用jQuery的$ .text(),可以安全地将不受信任的数据添加到标记。 将不受信任的数据添加到非事件处理程序的HTML属性中,可以使用element.setAttribute或$ .attr()来完成。 对于内部脚本标记(html上下文中的javascript上下文)或javascript事件处理程序属性(html属性上下文中的javascript上下文)等双重上下文,您必须确保对两者进行编码。
对于HTML内容,您可以选择使用DOMPurify删除任何活动内容,但如果您需要允许不受信任的HTML片段,则更有效。
答案 1 :(得分:0)
我已经看到了一些堆栈溢出答案,但它们没有提供 标准库中的完整规范化/编码解决方案 我可以写静态测试,以确保开发人员使用 库。
原因在于,您执行这些操作的顺序不仅特定于每个应用程序,而且特定于每个应用程序中输出的每个变量。您编写的任何测试套件都将特定于每个应用程序,您将无法编写一个适合所有应用程序的测试套件。除非组织中的所有应用程序都使用 完全相同的 技术,方法和流程,否则请进行测试。根据我的经验,没有公司达到这种统一水平,除非它真的是一个单一的开发者。
您对我如何使用"静态分析"有任何想法尝试和 确保开发人员做正确的事情?
Veracode,HP Fortify是两个COTS示例。我知道他们可以检查几种不同类型的代码库。但是这些需要将它们注入开发周期以使它们有效...理想情况下,作为构建管道的一部分。