Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

JSONP 与 CORS 两种跨域资源共享机制

wpadmin~October 29, 2019 /InfoSec

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

JSONP
https://www.w3schools.com/js/js_json_jsonp.asp

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.