美文网首页
浏览器 -- 同源策略:为什么XHR不能跨域请求资源?

浏览器 -- 同源策略:为什么XHR不能跨域请求资源?

作者: _路明非_ | 来源:发表于2019-12-09 08:22 被阅读0次

    安全策略来保障我们的隐私和数据的安全 -- 同源策略

    如果 Web 世界是绝对自由的,那么页面行为将没有任何限制,这会造成无序或者混沌的局面,出现很多不可控的问题。

    1. 修改银行站点的 DOM、CSSOM 等信息;
    2. 在银行站点内部插入 JavaScript 脚本;
    3. 劫持用户登录的用户名和密码;
    4. 读取银行站点的 Cookie、IndexDB 等数据;
    5. 甚至还可以将这些信息上传至自己的服务器,这样就可以在你不知情的情况下伪造一些转账请求等信息。

    什么是同源策略

    同源

    如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源

    同源策略

    览器默认两个相同的源之间是可以相互访问资源和操作 DOM 的。两个不同的源之间若想要相互访问资源或者操作 DOM,那么会有一套基础的安全策略的制约,我们把这称为同源策略。

    同源策略主要表现在 DOM、Web 数据和网络这三个层面

    DOM 层面

    同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作。

    数据层面

    同源策略限制了不同源的站点读取当前站点的 Cookie、IndexDB、LocalStorage 等数据。

    网络层面

    同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点

    安全和便利性的权衡

    页面中可以嵌入第三方资源

    1. Web 世界是开放的,可以接入任何资源,而同源策略要让一个页面的所有资源都来自于同一个源,也就是要将该页面的所有 HTML 文件、JavaScript 文件、CSS 文件、图片等资源都部署在同一台服务器上,这无疑违背了 Web 的初衷,也带来了诸多限制。比如将不同的资源部署到不同的 CDN 上时,CDN 上的资源就部署在另外一个域名上,因此我们就需要同源策略对页面的引用资源开一个“口子”,让其任意引用外部文件。
    2. 所以最初的浏览器都是支持外部引用资源文件的,不过这也带来了很多问题。之前在开发浏览器的时候,遇到最多的一个问题是浏览器的首页内容会被一些恶意程序劫持,劫持的途径很多,其中最常见的是恶意程序通过各种途径往 HTML 文件中插入恶意脚本。
    3. 为了解决 XSS 攻击,浏览器中引入了内容安全策略,称为 CSP。CSP 的核心思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执行内联 JavaScript 代码。通过这些手段就可以大大减少 XSS 攻击。

    跨域资源共享和跨文档消息机制

    1. 跨域资源共享(CORS),使用该机制可以进行跨域访问控制,从而使跨域数据传输得以安全进行。
      2 .如果两个页面不是同源的,则无法相互操纵 DOM。不过在实际应用中,经常需要两个不同源的 DOM 之间进行通信,于是浏览器中又引入了跨文档消息机制,可以通过 window.postMessage 的 JavaScript 接口来和不同源的 DOM 进行通信。

    同源策略、CSP 和 CORS 之间的关系

    同源策略就是说同源页面随你瞎搞,但是不同源之间想瞎搞只能通过浏览器提供的手段来搞

    1. 读取数据和操作 DOM 要用跨文档机制
    2. 跨域请求要用 CORS 机制
    3. 引用第三方资源要用 CSP

    相关文章

      网友评论

          本文标题:浏览器 -- 同源策略:为什么XHR不能跨域请求资源?

          本文链接:https://www.haomeiwen.com/subject/pctvgctx.html