JavaScript库或Esapi阻止XSS - 转义和编码不受信任的数据

时间:2017-01-02 22:50:07

标签: javascript encoding xss esapi antixsslibrary

我正在使用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

此刻我只对标准化输入和编码输出感兴趣。 我也在寻找最新的,维护良好的,理想情况下不依赖于其他库。

有人建议使用最好的方法吗?

2 个答案:

答案 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示例。我知道他们可以检查几种不同类型的代码库。但是这些需要将它们注入开发周期以使它们有效...理想情况下,作为构建管道的一部分。