浏览器 同源策略

  1. 3个关键点 scheme, host, port in URL. IE 浏览器有一点点特殊: https://en.wikipedia.org/wiki/Same-origin_policy
  2. Same Origin Policy 只是禁止读取返回的信息, 并不禁止发送请求, 所以其实请求已发出,浏览器以及收到,只是发现不符合这个策略而终止. prelight 可以通过2步, 来避免发出真正的请求. 也就是有的文档提到的 禁止读, 不禁止写.
  3. 正因为不禁止发出请求, 所以同源策略不能阻止 CSRF 和 clickjacking;
  4. 尽管有同源策略,不同的网站还是可以通过link 相互关联, 跨站使用img, CSS, Javascript, 常见适用同源策略的是AJAX 请求,iframe 等;
  5. 尽管通过同源策略限制了 AJAX, 但是有些时候要需要跨站资源共享, 所以就有了 CSRS (Cross Site Resource Sharing)相关的http header;
  6. 同源策略的内容
  7. IE 浏览器的特殊之处: a: trust zone 里面的可以任意跨域, b: 端口号 不用来区分跨域. 这些都是非标准
  8. 可以通过 document.domain="company.com" 来让多个子domain之间或子domain 与父domain 之间实现跨域(同时端口号被设置为null);
  9. 如何绕过同源策略 详细文档
  1. CSRS
  2. JSONP
  3. window.postMessage Cross-document messaging
  4. 同一个主域下如果协议和端口一样, 可以通过设置 window.domain 来处理(只能从长到短)
  5. WebSocket
  6. window.name 传递

    1. 如何避免跨站写?
  7. CSRF token

    1. 如何防止跨站读?
  8. 使你的资源不可被嵌入(img, CSS, JavaScript): 更改资源 Content-Type, 使用动态CSRF token;

    1. 跨站的请求不能定制 HTTP header, 不跨站的则可以.

标签: none

添加新评论