我收到了一份 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