由于我的另一个问题(Why is the 'src' attribute allowed to link to scripts from external domains, and XmlHtppRequests not?)没有给我任何答案。我继续采用更实际的方式:
当使用jQuery ajax调用时,您不允许(通过浏览器)进行跨站点脚本编写,但您可以通过附加脚本标记来避免这种情况。
some_script.js
$('div').text('The code to show this text was loaded from a different server, this remote script, instructed to update all the div\'s');
跨站点scripting_example_ajax.html
<!DOCTYPE HTML>
<head></head>
<body>
<span>ajax call</span>
<div></div>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function() {
var source = "http://malicious.s3.amazonaws.com/some_script.js"
$.get( source, function( data ) {
eval(data)
});
});
</script>
</body>
这将如预期的那样无效。它会在Chrome中提供<strong> No&#39; Access-Control-Allow-Origin&#39;标头出现在请求的资源上。起源&#39; null&#39;因此不允许访问。错误。 Chrome和大多数其他浏览器都在保护用户免受跨站点脚本(XSS)的危害。
但是当我做以下事情时:
跨站点scripting_example_appendto.html
<!DOCTYPE HTML>
<head></head>
<body>
<span>with jQuery appendTo</span>
<div></div>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function() {
var source = "http://malicious.s3.amazonaws.com/some_script.js"
$('<script id="script" src='+source+' >').appendTo('body');
});
</script>
</body>
有效。一旦将&#34; some_script.js&#34; 脚本连接到 body ,它就会被执行,因为您将看到DOM正在更新。
由于这种方法非常简单,我不认为我发现了一个漏洞,而仅仅是因为我没有掌握跨站点脚本/同源策略的概念。
为什么第二种方式( cross-site-scripting_example_appendto.html )不是跨站点脚本?
改述我的问题 我可以用跨站点脚本(如果允许的话)做什么,我可以用附加新内容来做什么?
答案 0 :(得分:0)
您对跨站点脚本涉及的内容感到有些困惑。跨站点脚本是指user a
将一些恶意代码输入您的网站。 user b
认为自己位于受信任的网站上,并且user a
的输入会以某种方式到达user b
。因此,脚本已“越过网站”。