我知道这个网站和其他网站已经讨论了很多,但我仍然无法阅读跨域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政策,根据我的研究,以下指令与我的方案相关:
default-src&#39; self&#39; cdn.example.com(default-src是加载内容的默认策略,如JavaScript,图像,CSS,字体,AJAX请求,框架,HTML5媒体。
script-src&#39; self&#39; js.example.com(定义JavaScript的有效来源。)
connect-src&#39; self&#39; (适用于XMLHttpRequest(AJAX),WebSocket或EventSource。)
但是,我不确定哪个指令适用于通过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
请注意,不会向服务器发送阻止跨域请求的标头:
考虑到我是跨域请求的初学者,请感谢您的耐心等待。此外,请提供可以帮助我更好地理解概念的任何链接。