将<script>附加到<body>允许我规避'同源政策'。或者这不是真正的跨站点脚本?</script>

时间:2014-12-22 11:04:29

标签: jquery ajax cors xss

由于我的另一个问题(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 )不是跨站点脚本?

改述我的问题 我可以用跨站点脚本(如果允许的话)做什么,我可以用附加新内容来做什么?

1 个答案:

答案 0 :(得分:0)

您对跨站点脚本涉及的内容感到有些困惑。跨站点脚本是指user a将一些恶意代码输入您的网站。 user b认为自己位于受信任的网站上,并且user a的输入会以某种方式到达user b。因此,脚本已“越过网站”。