У нас есть встроенный скрипт, запущенный на странице одного из наших клиентов. Мы получили от них отчет о том, что параметры запроса, которые мы отправляем на эту страницу, не защищены должным образом от внедрения XSS.
Когда я пытаюсь ввести на своем сайте URL-адрес типа: https://www.clientsite.com?somekey=%3Csvg%20onload%3Dalert(document.cookie)%3E
, ядействительно, на панели оповещений отображаются файлы cookie.
Но когда я запускаю наш сценарий локально, я не могу воспроизвести эту инъекцию. Панель предупреждений никогда не появляется, независимо от того, что я ввел в значение параметра запроса.
Очень упрощенная версия скрипта:
<html lang="en">
<head>
<meta charset="utf-8">
<title>XSS test</title>
</head>
<body>
<div id="content"></div>
<script>
(function() {
var url = window.location.href
var someKey = 'somekey'
var regexS = "[\\?&]"+someKey+"=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(url);
var parentElement = document.querySelector('#content');
var widget = document.createElement('div');
// var svgInjection = '<svg onload=alert("alert!!")>'
// var svgEncodedInjection = '%3Csvg%20onload%3Dalert("alert!!")%3E'
widget.innerHTML = '<div>' + results[1] + '</div>';
return parentElement.insertBefore(widget, parentElement.firstChild);
})()
</script>
</body>
</html>
Я не понимаю, как идентичноСценарий, получающий идентичные параметры запроса, показывает панель предупреждений на сайте клиента и ничего, когда я запускаю ее локально. Есть мысли?