前后端数据交互经常会碰到请求跨域,什么是跨域,以及有哪几种跨域方式,在xss和csrf的利用上理解同源和跨域是必要的。

  • 1.什么是同源策略
  • 2.常见跨域场景
  • 3.同源策略限制内容
  • 4.突破同源策略的方案

1.什么是同源策略

同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到 XSS、CSFR 等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。


2.常见跨域场景

当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。





3.同源策略的限制

1.cookie/localstorage/indexeddb等存储性内容
2.DOM节点
3.ajax发送请求后被浏览器拦截(跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取新的内容,所以可以发起跨域请求。同时也说明了跨域并不能完全阻止 CSRF,因为请求毕竟是发出去了。)


4.突破同源策略的方案

    方案一:jsonp
利用 script 标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的 JSON 数据。JSONP 请求一定需要对方的服务器做支持才可以。仅支持get方法
    方案二:3个标签允许跨域加载资源
        <img src=XXX>
        <link href=XXX>
        <script src=XXX>