首页 > 解决方案 > 无法重现查询参数 html 注入

问题描述

我们有一个嵌入式脚本在我们的一个客户的页面上运行。我们收到他们的报告,我们发送到该页面的查询参数没有适当地防范 XSS 注入。

当我尝试这样的网址时: 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>

我不明白接收相同查询参数的相同脚本如何在客户端站点上显示警报面板,而当我在本地运行它时什么也没有。有什么想法吗?

标签: javascriptxssquery-parameters

解决方案


推荐阅读