跨域

1.什么是跨域?

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。

所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。

 例如:

 

 

 还需要讲的一个东西叫做同源策略:

同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容易受到 XSS、 CSFR 等攻击。

同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。

源就是协议、域名和端口号。

协议:http,https

域名:区域的名字,每个域名都对应一个IP地址, 举个例子:域名:www.baidu.com,http://180.101.49.12/

180.101.49.12则为IP地址

为什么要去限制跨域呢?

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

  1. 用户登录了自己的银行页面 向用户的cookie中添加用户标识。
  2. 用户浏览了恶意页面 。执行了页面中的恶意AJAX请求代码。
  3. 发起AJAX HTTP请求,请求会默认把对应cookie也同时发送过去。
  4. 银行页面从发送的cookie中提取用户标识,验证用户无误,response中返回请求数据。此时数据就泄露了。
  5. 而且由于Ajax在后台执行,用户无法感知这一过程。


DOM同源策略也一样,如果iframe之间可以跨域访问,可以这样攻击:

  1. 做一个假网站,里面用iframe嵌套一个银行网站
  2. 把iframe宽高啥的调整到页面全部,这样用户进来除了域名,别的部分和银行的网站没有任何差别。
  3. 这时如果用户输入账号密码,我们的主网站可以跨域访问到的dom节点,就可以拿到用户的输入了,那么就完成了一次攻击。

所以说有了跨域跨域限制之后,我们才能更安全的上网了。

跨域的几种解决方法

1.后台放开限制        优点:谁都能请求,方便        缺点:不安全

2.JSONP   利用script标签中的src属性不受同源策略限制

3.设置document.domain解决无法读取非同源网页的 Cookie问题

4.跨文档通信 API:window.postMessage()

5.CORS

6.webpack本地代理

 7.websocket

8.Nginx反向代理

 

posted @ 2022-05-07 12:43  wenwenfff  阅读(44)  评论(0编辑  收藏  举报