避免 Veracode CWE-80:jquery htm() 方法中与脚本相关的 HTML 的不当中和

Posted

技术标签:

【中文标题】避免 Veracode CWE-80:jquery htm() 方法中与脚本相关的 HTML 的不当中和【英文标题】:Avoid Veracode CWE-80: Improper Neutralization of Script-Related HTML in jquery htm() method 【发布时间】:2018-11-24 14:30:49 【问题描述】:

我刚刚完成了对一个 asp.net mvc Web 应用程序的第一次 Veracode 静态扫描,Veracode 发现了几十个 CWE-80: Improper Neutralization of Script-Related html Tags in a Web Page 缺陷。

几乎所有这些都涉及到 jquery html() 方法的使用。我们的模式是在 javascript 中进行 $.ajax() 调用,并在成功事件中在 html 元素中显示 $.ajax 调用的结果,如下所示:

success: function(data) 
    $('#elementid').html(data);

在大多数情况下,这些 $.ajax() 调用是对返回 MVC 部分视图、塞满 html 标记等的 MVC 控制器方法。

我们将如何更改我们的 javascript,以便这样的调用不会被 Veracode 标记为 CWE-80 缺陷?我们仍然可以对返回 html 的 blob 并通过 Veracode 传递集合的控制器方法进行客户端 $.ajax 调用吗?

【问题讨论】:

【参考方案1】:

虽然这篇文章已经有将近 2 年的历史了,但我刚刚遇到了同样的问题,所以我就碰上了它。缓解对我们来说不是一个选择。幸运的是,我们在 Mozilla Developer Network 上找到了 JavaScript WebAPI。

在我们的例子中,我们正在创建一个下拉列表并通过 jquery append() 附加每个选项。 Web API 对数据进行了足够的清理,以至于 Veracode 应该允许调用 append 或 html 方法。

https://developer.mozilla.org/en-US/docs/Web/API

【讨论】:

感谢@dj_datum。你究竟做了什么来“清理”你的数据?当你说“应该”时,这是否意味着你还没有使用这个 web api 运行静态扫描? 我们刚刚进行了 Veracode 咨询,我们的联系人对我们使用确实通过了扫描的 WebAPI 感到满意。使用 WebAPI 可以充分解析数据,以至于使用 jquery 方法不会被标记为危险。为了进行清理,我们尝试使用正则表达式来扫描文本参数以符合除逗号之外没有其他字符的文本。扫描仍将其标记为失败。【参考方案2】:

我安排了一次 Veracode 咨询,并了解到 Veracode 只是将所有 $.html() 调用标记为中等严重性的缺陷。我们可以采取两种行动:

    将缺陷标记为“已缓解”并提供解释,或 更改代码以删除对 $.html() 的所有调用。

我们选择将所有这些缺陷标记为“已缓解”。

【讨论】:

以上是关于避免 Veracode CWE-80:jquery htm() 方法中与脚本相关的 HTML 的不当中和的主要内容,如果未能解决你的问题,请参考以下文章

如何在这个 c:out 中避免 XSS?

为啥我的函数参数化后 Veracode 仍然报告 CWE-89?

JSP 中的 Veracode 问题

java中动态创建的order by子句在Veracode扫描中显示为sql注入问题

智能软件安全上海道宁为您带来智能软件安全平台——​Veracode,帮助您全面地保护您构建和管理地应用程序

Veracode - 网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)