2

我收到了一份 AppScan 安全报告,其中以下代码被标记为“基于 DOM 的跨站点脚本”:

i !== null && i.errors ? (i.errors[0].Key === "OrderNotFound" || 
i.errors[0].Key === "ShoppingCartModified") && (alert(i.errors[0].Value),
window.location.href = window.location.href.split("#")[0]) : 
t([s("GenericErrorMessage")])

但我看不出问题出在哪里。我想知道这是否可能是误报。这是没有缩小的原始代码

if (jsonResult !== null && jsonResult.errors) {
    if (jsonResult.errors[0].Key === "OrderNotFound" ||
        jsonResult.errors[0].Key === "ShoppingCartModified") {
        alert(jsonResult.errors[0].Value); //the problem is here
        window.location.href = window.location.href.split("#")[0]; //or here
    }
} else {
    //uiErrors is a KnockoutJS observableArray that is 
    //shown in the page using the text binding avoiding any innerHTML injection.
    //res = method that returns an error msg string for a given key.
    uiErrors([res("GenericErrorMessage")]); 
}

jsonResult是 ajax 调用的响应,它具有以下结构:

{
    "errors": [
        {"Key": "OrderNotFound", "Value": "Your order could not be found."}
    ]
}

键和都不是使用任何用户输入创建的。它们是服务器代码中的 const 字符串。

添加 AppScan 输出

[1 of 1] 基于 DOM 的跨站脚本

严重性:高

测试类型:应用

易受攻击的 URL:https ://www.domain.com/scripts/checkout.js

CVE ID:不适用

CWE ID:79

修复任务:分析客户端代码并清理其输入源

变体 1 的 1 [ID=1612185601]

请求/响应:

https://www.domain.com/scripts/checkout.js?v=m9is46e_hmcr4gnmuj4o6xssdozcytmn9flbuxtvbmy1:

1 : i !== null && i.errors ? (i.errors[0].Key === "OrderNotFound" || i.errors[0].Key === "ShoppingCartModified") && (alert(i.errors[0].Value), window.location. href = window.location.href.split("#")[0]) : t([s ("GenericErrorMessage")])

响应验证:

不适用

推理:

不适用

CWE 标识:

79

4

2 回答 2

0

您显示的代码似乎没有任何 XSS 问题。这可能是误报,或者扫描仪没有正确识别问题的位置。

在使用完全未压缩的代码时,可能值得在您的应用程序上重新运行扫描仪,以便获得更精确的位置信息;即使它实际上是误报,这也可以帮助您了解扫描仪的困惑所在。

于 2013-09-18T18:58:52.537 回答
0

window.location.href = window.location.href.split("#")[0];

上面的代码行导致您出现问题。从技术上讲,split("#")[0] 将删除 # 字符之后的值.. 但这里的缓存点是:如果我们在 "#" 字符之前包含注入会怎样?

protocal://domainname.com/details.htm/ "注入!@#$XSS" #Helloworld!

于 2016-02-27T13:56:25.140 回答