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