基于DOM的XSS在哪里?

时间:2013-09-18 16:46:45

标签: javascript xss

我收到了一份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的跨站点脚本

严重性:高

测试类型:应用

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

CVE ID:N / A

CWE ID(s):79

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

变体1 of 1 [ID = 1612185601]

请求/响应:

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

1:i!== null&&我错了? (i.errors [0] .Key ===“OrderNotFound”|| i.errors [0] .Key ===“ShoppingCartModified”)&& (警报(i.errors [0]。价值), window.location.href = window.location.href.split(“#”)[0]):t([s ( “GenericErrorMessage”)])

回复验证:

N / A

推理:

N / A

CWE ID:

79

2 个答案:

答案 0 :(得分:0)

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

使用完全无法识别的代码时,可能需要在应用程序上重新运行扫描程序,以便获得更精确的位置信息;即使它实际上是误报,这也可以帮助您理解扫描仪的困惑。

答案 1 :(得分:0)

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

上面的代码行导致了您的问题。技术上分裂("#")[0]将删除#character之后的值..但是这里的缓存点是:如果我们在#34;#"之前包括注入怎么办?性格?

protocal:!//domainname.com/details.htm/的 "喷射@#$ XSS" #Helloworld