Contents
JSONP 与 CORS 两种跨域资源共享机制
说明
受限于浏览器同源策略,通常情况下, JavaScript 只能获取同源 (域名,协议,端口) 的资源并与之交互。
JSONP 和 CORS 都是很常见的跨域机制,这里 JSONP 的缺点是仅支持 GET 请求。 CORS 可以支持各种类型的 HTTP 请求,当然其缺点是浏览器兼容性相对较差,仅支持 IE10+ 的浏览器。
CORS 的四个特殊 HTTP 响应头
Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods:GET,POST
Access-Control-Allow-Credentials: true
场景
假如应用有一处请求外部 CORS 资源,CORS 的请求 URL 是攻击者可控的 ,且在发送请求时 .withCredentials=true
的值是 true
。 这种情况下攻击者部署恶意服务器可以批量获取用户 cookie 。
var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/credentialed-content/';
function callOtherDomain(){
if(invocation) {
invocation.open('GET', url, true);
invocation.withCredentials = true;
invocation.onreadystatechange = handler;
invocation.send();
}
}
参考资料
同源策略
https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy
CORS
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
Leave a Reply