首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何净化ajax成功响应北极星扫描XSS

如何净化ajax成功响应北极星扫描XSS
EN

Stack Overflow用户
提问于 2022-06-28 20:27:56
回答 1查看 181关注 0票数 0

我正在运行Synopsys的Coverity扫描工具,它说下面的功能需要净化“成功”。我尝试过DomPurify、DomParser等,它所做的就是破坏UI。任何帮助都会很好。

代码语言:javascript
复制
$.ajax({
   url: window.paramFormRoleView.UrlGetIsoData,
   success: function (response) {
     bindIsosDropDown(response);
   }
 });

以下是bindIsosDropDown的函数

函数bindIsosDropDown(isoData) {

代码语言:javascript
复制
var isoDropDownHtml = "";

if (window.existingAssociatedIsos !== null && window.existingAssociatedIsos !== "") {

    var existingAssociatedIsosArr = window.existingAssociatedIsos.split(',').map(Number);

    $(isoData).each(function (index, iso) {

        isoDropDownHtml += '<option value="' + iso.IsoId + '"' + (($.inArray(iso.IsoId, existingAssociatedIsosArr) > -1) ? 'Selected' : '') + '>' + iso.LegalName + '</option>';

    });

} else {

    $(isoData).each(function (index, iso) {

        isoDropDownHtml += '<option value="' + iso.IsoId + '">' + iso.LegalName + '</option>';

    });

}

$("#ddlIsoList").html(isoDropDownHtml);

$(".multiselect").multiselect({ noneSelectedText: 'Select ISO' });

manageIsosAndRoles();

}

EN

回答 1

Stack Overflow用户

发布于 2022-07-01 05:12:37

问题

bindIsosDropDown函数不安全。它接受isoData作为参数,但它直接来自网络,因此它被“污染”(可能在攻击者控制下)。然后,它将isoData的元素连接起来,以便在以下代码行(和其他代码行)中生成HTML:

代码语言:javascript
复制
$(isoData).each(function (index, iso) {
    isoDropDownHtml += '<option value="' + iso.IsoId + '"' + ...;
});

例如,如果isoData是(在JSON语法中):

代码语言:javascript
复制
[
  { IsoId: "\"><script>alert('Gotcha!')</script><option value=\"" }
]

那么isoDropDownHtml将是:

代码语言:javascript
复制
<option value=""><script>alert('Gotcha!')</script><option value="" ...

因此,浏览器将执行攻击者的有效负载(这里只提供一条alert消息,但可能是任何恶意代码)。

解决方案

通常,您希望转义可能位于受污染数据中的任何HTML元字符,这样它们就不能脱离语法上下文,在这种情况下,语法上下文是一个双引号属性值。Escaping HTML strings with jQuery的问题对具体的方法有几个建议。

假设您使用这些建议之一,并因此有一个名为escapeHtml的函数来转义HTML,您可以这样使用它:

代码语言:javascript
复制
$(isoData).each(function (index, iso) {
    isoDropDownHtml += '<option value="' + escapeHtml(iso.IsoId) + '"' + ...;
    //                                     ^^^^^^^^^^
});

如果您现在研究一下前面示例isoData发生的情况,您将看到IsoId被正确地编码为一个HTML属性值,因此不会交付可执行的Javascript。

请注意,您必须在可能处理它的应用程序中的任何地方转义像这样的受污染的数据。仅仅修复一个实例,甚至修复Coverity (或任何工具)能够检测到的所有实例都是不够的。如果问题中的代码是典型的应用程序,那么可能会有更多的地方易受攻击,因此有必要进行仔细和系统的审查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72792794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档