window.location.search的跨站点脚本问题

Ven*_*nki 7 javascript xss

我已经经历了这么多的论坛和维基百科,因为我试图了解XSS攻击几天,我已经花了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;
Run Code Online (Sandbox Code Playgroud)

这些陈述是

var qs = window.location.search;
val = qs.substring(start,end);
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;
Run Code Online (Sandbox Code Playgroud)

应用程序扫描程序测试工具作为XSS(跨站点脚本)问题的可能代码,但我不确定它是如何导致XSS以及我现在如何解决此问题.有人可以提供有关如何修复此漏洞的见解吗?

Qwe*_*tiy 3

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

该行没有任何转义,它期望'(... \''+formName+'\' );...'是一个字符串。但它可以变成其他东西:

formName = "'); alert('I\'m free to do anything here'); (''+"
Run Code Online (Sandbox Code Playgroud)
document.getElementById('calendarA').innerHTML = myValue;
Run Code Online (Sandbox Code Playgroud)

让我们将这样的片段放入myValue

... <img src=void onerror="alert('hacked')" /> ...
Run Code Online (Sandbox Code Playgroud)

您可以检查它是否有效:

var myValue = '<a href="javascript:parent.opener.assignDateIps( new Date(\''+year+'\',\''+month+'\',\''+thisDay+'\'), \''+contextstr+'\', \''+formName+'\' );window.close()" class="modulelink">'+thisDay+'</a></td>';
Run Code Online (Sandbox Code Playgroud)
formName = "'); alert('I\'m free to do anything here'); (''+"
Run Code Online (Sandbox Code Playgroud)

您永远不应该信任 url 字符串传递的任何数据。任何网站都可以放置指向您网站的任何链接。某些用户单击它,进入您的站点,参数在您站点的上下文中执行,攻击者可以做任何他想做的事情。