Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';这个XSS攻击不起作用吗? 背景_Javascript_Security_Xss - Fatal编程技术网

Javascript 为什么不是';这个XSS攻击不起作用吗? 背景

Javascript 为什么不是';这个XSS攻击不起作用吗? 背景,javascript,security,xss,Javascript,Security,Xss,我正在建立一个列表,列出我所在地区的组织。该站点由API提供支持,并将其数据存储在MongoDB实例中 我从API获取JSON,并用Javascript动态构建内容 现在为了测试XSS攻击,我特意添加了一些代码,将Javascript警报注入到我的页面中 但它不起作用?这显然让我很高兴,但我更不明白为什么不 JSON HTML 搬到莱斯特 问题: 为什么在我查看页面时页面不会触发警报?据我所知,通过AJAX插入可执行Javascript有点有限。 您不能仅仅通过AJAX获取代码,将

我正在建立一个列表,列出我所在地区的组织。该站点由API提供支持,并将其数据存储在MongoDB实例中

我从API获取JSON,并用Javascript动态构建内容

现在为了测试XSS攻击,我特意添加了一些代码,将Javascript警报注入到我的页面中

但它不起作用?这显然让我很高兴,但我更不明白为什么不

JSON HTML

搬到莱斯特
问题:
为什么在我查看页面时页面不会触发警报?

据我所知,通过AJAX插入可执行Javascript有点有限。 您不能仅仅通过AJAX获取代码,将其放入LI的innerHTML中并执行。 这就是你要做的:

var organisation=JSON.parse(input);
var title=document.createElement('li');
title.setAttribute('class','organisation-title');
title.innerHTML=organisation.title;
list.appendChild(title);
但是,一个解决办法是,如果您将注射更改为:

<iframe src='/' width='1' height='1' onload='window.alert("boo");'></iframe>


我认为这会注入自身。

如果您提供JSON内容,那就太好了。起初,实体似乎是经过编码的。这可能取决于您使用的浏览器。Chrome会自动捕获此类XSS攻击。我不确定FireFox是否也有,MSIE没有。请在这里发布足够的代码来重现它。向我们展示获取JSON和处理JSON的代码。它可能会进行一些转义,或者阻止导入的javascript运行。谢谢,这很有效,它可以证明API目前仍然容易受到XSS的攻击。
function S_GET(id) {
    var a = new RegExp(id+'=([^&#=]*)');
    return decodeURIComponent(a.exec(window.location.search)[1]);
}

// retrieves languages and adds them to a list
var organisationId = S_GET('organisationId');

var url = 'http://damp-island-8192.herokuapp.com/organisations/' + organisationId;


var dataRequest = new XMLHttpRequest();
dataRequest.open('GET',url, false);
dataRequest.onreadystatechange = processJSON;
dataRequest.send();

function processJSON() {
    if ( dataRequest.readyState == 4 && dataRequest.status == 200 ) {    
        showJSON(dataRequest.responseText);
    }
}

function showJSON(input) {

    //dom elements
    var list = document.createElement('ul');
    list.setAttribute('id', 'organisation-details-list');

    var organisation = JSON.parse(input);

    // list organisation details
    // title
    var title = document.createElement('li');
    title.setAttribute('class', 'organisation-title');
    title.innerHTML = organisation.title;
    list.appendChild(title);
    // description
    var desc = document.createElement('li');
    desc.setAttribute('class', 'organisation-desc');
    desc.innerHTML = organisation.description;
    list.appendChild(desc);
    // link
    var link = document.createElement('li');
    link.setAttribute('class', 'organisation-link');
    var a = document.createElement('a');
    a.setAttribute('href', organisation.url);
    a.innerHTML = organisation.url;
    link.appendChild(a);
    list.appendChild(link);

document.getElementsByClassName('organisation')[0].appendChild(list);
};
<!DOCTYPE html>
<head>
    <title>Moving To Leicester</title>
    <link rel="stylesheet" type="text/css" href="css/styles.css">
</head>
<body>
    <div class="container">
        <div class="header">
            <ul class="nav nav-pills dropdown-menu-right">
                <li class="active"><a href="splash-page.html">Home</a></li>
                <li><a href="#">About</a></li>
                <li><a href="#">Contact</a></li>
            </ul>
        </div>
        <div class="row padding-top-5">
            <div class="col-md-2">
                <!--Sidebar content-->

            </div>
            <div class="col-md-10">
                <!--Body content-->
                <div class="organisation"></div>

            </div>
        </div>
    </div>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="js/organisation-details-page.js"></script>
</body>
</html>
var organisation=JSON.parse(input);
var title=document.createElement('li');
title.setAttribute('class','organisation-title');
title.innerHTML=organisation.title;
list.appendChild(title);
<iframe src='/' width='1' height='1' onload='window.alert("boo");'></iframe>