logo头像

求知若渴,虚心若愚

浏览器 - 造成跨域的两种策略

造成跨域的两种策略

造成跨域的策略一般有两种情况,分别是:

  • DOM同源策略
  • XHR同源策略

DOM同源策略

  • 浏览器会禁止对不同源页面DOM进行操作。
  • 主要针对场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。

出现场景

  • 如果没有这个限制,我们做一个假的网站(a.com),内嵌一个iframe(指向银行网站(b.com))
  • 把iframe做成银行网站的样子,用户有时候是看不出来的
  • 这时如果用户输入账号密码,我们的主网站(假网站(a.com))可以跨域访问到指向银行网站(b.com)iframe的DOM节点,就可以拿到用户的账户密码了

简单来说就是一个网页中有一个骗子的iframe,这个iframe和网页一样大,如果允许跨域,那么骗子的iframe就可以获得我们的敏感信息了

XHR同源策略

  • XMLHttpRequest可以发送ajax
  • 浏览器禁止使用XHR对象向不同源的服务器地址发起HTTP请求

出现场景

  • 用户登录了自己的银行页面(a.com),(a.com) 向用户的 cookie 中添加用户标识。
  • 用户浏览了恶意页面(b.com),执行了页面中的恶意 AJAX 请求代码。
  • 恶意页面(b.com) 向(a.com)发起 AJAX HTTP 请求,请求会默认把(a.com)对应 cookie 也同时发送过去。
  • 银行页面从发送的 cookie 中提取用户标识,验证用户无误,response 中返回请求数据。此时数据就泄露了。

TIP
AJAX同源策略主要用来防止CSRF攻击。
如果没有AJAX同源策略,相当危险,因为我们发起的每一次HTTP请求都会带上请求地址对应的cookie

TIP
综上所述,浏览器处于安全方面的考虑,要禁止跨域访问,也必须禁止跨域访问!必须禁止!

TIP

不允许跨域访问并非是浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了
最好的例子是CSRF跨站攻击原理,请求是发送到了后端服务器,无论是否设置允许跨域

有些浏览器不允许从HTTPS跨域访问HTTP,比如Chrome和Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是特例

支付宝打赏 微信打赏

赞赏是对我们的肯定!