如何阅读跨域GET响应?

时间:2017-08-21 05:49:13

标签: javascript cross-domain content-security-policy

我知道这个网站和其他网站已经讨论了很多,但我仍然无法阅读跨域GET请求的回复。

我正在测试一个网站,该网站在向网站发送GET请求https://domain/csrf-token/时会使用CSRF令牌进行响应。该站点具有全面的CSP策略,并使用令牌响应以下请求:

<html>
<body>
<script>
var HttpClient = function() {
    this.get = function(aUrl, aCallback) {
        var anHttpRequest = new XMLHttpRequest();
        anHttpRequest.onreadystatechange = function() { 
            if (anHttpRequest.readyState == 4 && anHttpRequest.status == 200)
                aCallback(anHttpRequest.responseText);
        }

        anHttpRequest.open( "GET", aUrl, true );            
        anHttpRequest.send( null );
    }
}

var client = new HttpClient();
client.get('https://domain/csrf-token/', function(response) {
    alert(response);
});
</script>
</body>
</html>

即使请求成功,脚本也无法读取响应内容。我认为这是因为我对CSP政策指令的理解有限。我正在测试的网站有一个全面的CSP政策,根据我的研究,以下指令与我的方案相关:

  1. default-src&#39; self&#39; cdn.example.com(default-src是加载内容的默认策略,如JavaScript,图像,CSS,字体,AJAX请求,框架,HTML5媒体。

  2. script-src&#39; self&#39; js.example.com(定义JavaScript的有效来源。)

  3. connect-src&#39; self&#39; (适用于XMLHttpRequest(AJAX),WebSocket或EventSource。)

  4. 但是,我不确定哪个指令适用于通过javascript生成的跨域GET请求。能帮助我理解吗?

    我已将上述代码上传到AWS Cloudfront上的test.html文件中,因为CSP声明: connect-src&#39; self&#39; &#39;自&#39; * .cloudfront.net

    HTTP GET请求:

    GET /csrf-token/ HTTP/1.1
    Host: domain.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
    Accept: */*
    Accept-Language: en-US,en;q=0.5
    Referer: https://*.amazonaws.com/test.html
    Origin: https://*.amazonaws.com
    Connection: close
    

    HTTP响应:

    HTTP/1.1 200 OK
    Server: *****
    Date: Mon, 21 Aug 2017 05:20:24 GMT
    Content-Type: application/octet-stream
    Connection: close
    X-Frame-Options: SAMEORIGIN
    X-XSS-Protection: 1; mode=block
    x-csrf-token: 1******825-01-RDDOhp****csrf-token
    Set-Cookie: ****************************** cookie
    X-xcustomheader-xxx: xxx-frontend
    Strict-Transport-Security: max-age=604800
    X-Content-Type-Options: nosniff
    Strict-Transport-Security: max-age=2592000
    X-Frame-Options: SAMEORIGIN
    Cache-Control: max-age=0
    Content-Length: 57
    
    1******825-01-RDDOhp****csrf-token
    

    请注意,不会向服务器发送阻止跨域请求的标头:

    考虑到我是跨域请求的初学者,请感谢您的耐心等待。此外,请提供可以帮助我更好地理解概念的任何链接。

0 个答案:

没有答案