繁体   English   中英

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

[英]JavaScript library or Esapi preventing XSS - Escape and Encode untrusted data

我正在使用目前使用lodash进行JavaScript编码的某些一页应用程序。 我想通过以下方法来防止使用标准库的跨站点脚本(XSS):

1)转义所有不受信任的内容

2)根据目标CSS,HTML,HTMLAttribute JavaScript,JSON等对输出进行编码

我已经看到了很多堆栈溢出的答案,但是它们并没有在标准库中提供完整的规范化/编码解决方案,我可以编写静态测试来确保开发人员正在使用该库。

是否有仅可用于JavaScript的esapi或类似的“ light”库?

我已经看到了OWASP Esapi和jQuery编码器插件https://github.com/chrisisbeef/jquery-encoder和SalesForce编码器https://github.com/salesforce/secure-filters

目前,我只想规范化输入和编码输出。 我也在寻找最新的,维护良好的并且理想情况下不依赖于其他库的东西。

谁能建议最佳使用方法?

是否使用任何模板框架? 理想情况下,您应该使用像React这样的框架,该框架默认处理编码。 然后,您要做的就是确保不使用(或安全使用)dagerouslySetInnerHTML。

除非经过白名单验证,否则添加不可信CSS被认为是不安全的。 通过将数据分配给element.textContent或使用jQuery的$ .text(),可以安全地将不可信数据添加到标签中。 可以使用element.setAttribute或$ .attr()将不受信任的数据添加到不是事件处理程序的HTML属性中。 对于内部脚本标记(html上下文内的javascript上下文)或javascript事件处理程序属性(html属性上下文内的javascript上下文)之类的双重上下文,您必须确保对两者都进行编码。

对于HTML内容,您可以选择使用DOMPurify删除所有活动内容,但是如果您需要允许不受信任的HTML片段,则更有效。

我已经看到了很多堆栈溢出的答案,但是它们并没有在标准库中提供完整的规范化/编码解决方案,我可以编写静态测试来确保开发人员正在使用该库。

原因是您执行这些操作的顺序不仅特定于每个应用程序,而且特定于每个应用程序中输出的每个变量。 您编写的任何测试套件都将特定于每个应用程序,除非组织中的所有应用程序使用完全相同的技术,方法和流程,否则您将无法编写“一刀切”的测试。 以我的经验,没有一家公司能达到这种统一水平,除非它实际上是一个开发商。

您是否对如何使用“静态分析”来尝试确保开发人员做正确的事情有任何想法?

Veracode,HP Fortify是两个COTS示例。 我知道他们可以检查几种不同类型的代码库。 但是这些要求将它们注入到开发周期中才能使其有效……理想情况下是构建管道的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM