Я получил отчет о безопасности 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."}
]
}
Где и Ключ, и Значение не создаются с использованием пользовательского ввода. Это постоянные строки в коде сервера.
Добавление вывода AppScan
[1 из 1] Межсайтовый скриптинг на основе DOM
Серьезность: высокая
Тип теста: Применение
Уязвимый URL: https://www.domain.com/scripts/checkout.js
Идентификаторы CVE: Н/Д
Идентификаторы CWE: 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")])
Проверка в ответ:
N/A
Рассуждение:
N/A
Идентификатор CWE:
79