次のコード部分が「DOM ベースのクロスサイト スクリプティング」としてフラグ付けされた AppScan セキュリティ レポートを受け取りました。
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/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 ID:
79