使用window.location.search跨站点脚本问题

我已经经历了很多论坛和维基百科,因为有几天试图了解XSS攻击alomost我花了2-3天,但仍然没有得到更好的主意,因为建议多位专家解决方案&我想知道黑客可以如何注入恶意代码在受害者浏览器? 并且我的应用程序已经用于运行某些App Scanner标准测试工具,因此它捕获了很多XSS问题。 我想在这里放一个我的应用程序的XSS问题,所以可以请一些人帮我理解我为这个问题究竟做了什么。 尽管如此,为了更好地理解XSS问题,我一直在努力。 这是我的代码片段

function getParameter(param) {
        var val = "";
        var qs = window.location.search;
        var start = qs.indexOf(param);
        if (start != -1) {
                start += param.length + 1;
                var end = qs.indexOf("&", start);
                if (end == -1) {
                        end = qs.length
                }
                val = qs.substring(start,end);
        }
        return val;
}

var formName = getParameter("formName");
var myValue = '<a href="javascript:parent.opener.assignDateIps( new Date(''+year+'',''+month+'',''+thisDay+''), ''+contextstr+'', ''+formName+'' );window.close()" class="modulelink">'+thisDay+'</a></td>';
document.getElementById('calendarA').innerHTML = myValue;

var myValue = '<a href="javascript:parent.opener.assignDateIps( new Date(''+year+'',''+month+'',''+thisDay+''), ''+contextstr+'', ''+formName+'' );window.close()" class="modulelink">'+thisDay+'</a></td>';

这一行没有任何转义,它期望'(... ''+formName+'' );...'是一个字符串。 但它可以成为一些其他的事情:

formName = "'); alert('I'm free to do anything here'); (''+"
document.getElementById('calendarA').innerHTML = myValue;

让我们把这样的片段放到myValue

... <img src=void onerror="alert('hacked')" /> ...

你可以检查它的工作原理:

document.querySelector('button').addEventListener('click', function () {
  document.querySelector('output').innerHTML = document.querySelector('textarea').value;
})
<textarea>... <img src=void onerror="alert('hacked')" /> ...</textarea>
<button>Go</button>
<output></output>

您向我们展示的代码中没有任何内容易受攻击。

您正在阅读用户输入内容,因此可能会在此处引入漏洞。 这可能是您正在使用的工具正在检测的内容。

如果你的代码易受攻击,那么这将是因为你对formName next的值做了什么(在你没有向我们展示的代码中)。


这是一个可能的基于DOM的XSS问题。

如果使用formName的值,比如document.getElementById("demo").innerHTML=formName或者某种方式使用formName创建/修改DOM元素, formName您很容易受到攻击,因为我可以创建自定义url,如http://urwebsite.html?formName=<script>document.cookie_will_be_transfered_to_my_server_here</script>并要求登录人单击它(简单的社会工程)。现在我有该人的会话ID,使用它我可以做任何我想做的事情。

作为解决方案,来自用户的所有输入数据都必须进行html编码。

链接地址: http://www.djcxy.com/p/94189.html

上一篇: Cross Site Scripting issue with window.location.search

下一篇: NotFoundHttpException in RouteCollection.php line 161: laravel 5.3