我们的一个客户页面上运行着一个嵌入式脚本。我们从他们那里收到一份报告,指出我们没有适当地防止发送到该页面的查询参数受到XSS注入的攻击。</ p>
当我尝试以下网址时:
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>
我不明白相同的脚本如何接收相同的查询参数,如何在客户端站点上显示警报面板,而在本地运行时却什么也没有。有什么想法吗?