• 对于浏览器的同源策略你是怎样理解的呢?


    作者:王泥煤
    链接:https://www.zhihu.com/question/25427931/answer/30848852
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    1.什么是同源策略
    同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略。
    2.为什么说同源策略限制了人类文明的发展
    安全性和方便性是成反比的,十位数的密码提高了安全性,但是不方便记忆。同样,同源策略提升了Web前端的安全性,但牺牲了Web拓展上的灵活性。设想若把html、js、css、flash,image等文件全部布置在一台服务器上,小网站这样凑活还行,大中网站如果这样做服务器根本受不了的,可用性都不能保证的话,安全性还算个吊? 所以,现代浏览器在安全性和可用性之间选择了一个平衡点。在遵循同源策略的基础上,选择性地为同源策略“开放了后门”。 例如img script style等标签,都允许垮域引用资源,严格说这都是不符合同源要求的。然而,你也只能是引用这些资源而已,并不能读取这些资源的内容,不信你可以试试:在你自己的域内读取百度logo图片的内容,以读取到二进制数据为准。 你很快发现这是不可能的,你顶多只能判断这张图片是否存在(使用的img标签的onerror属性 )。因此浏览器降低了那么一点点安全性,却大大提升网站布置的灵活性。
    尽管浏览器开放了“后门”,然而现代文明却仍不满足。打破同源策略的方法有很多,抛开漏洞不谈,Server端的大数据整合和浏览器的插件往往就充当着这样一个角色。我有一个同事,由于在淘宝上买过一个自慰器,从此不管他打开哪个网站都会有自慰器的广告投递,弄得人家好尴尬。我手把手教他清除Cookie,发现者根本不奏效。(吐槽:我们使用的是一个公网IP,后来我吃惊的发现我的电脑中也出现了自慰器的广告).好吧,这样的例子还有很多。虽然,攻城狮们越来越肆无忌惮的浪,然而浏览器们依旧保持着他那份应有的节操(国产浏览器除外)。
    3.如果没有同源策略,普通用户将无密可保。
    尽管浏览器遵循同源策略,你仍可以发现你的访问过的网站、买过的东西、搜索过的字串、甚至你的兴趣爱好,都可以被远端分析出来。我们姑且认为这些大数据分析者是有节操的,不会随意泄露这些数据。如果浏览器不遵循同源策略,那么情况更糟:网站站长、广告联盟、流量统计商、xss黑客,随便哪个人都将无障碍的获取私密信息,例如各个网站的Cookie、email的邮件内容、OA页面的内容、QQ空间里设置为隐私的照片等,不止这些,听说过CSRF吗,这里不做科普,通过CSRF还可能用你的邮箱群发发邮件、在OA里面填上你旷工一天、在第三方支付平台里自由转账、用你的账号在知乎上胡乱发言降低你的big,等等。
    感谢同源策略,我才有勇气使用互联网。
    4.跨域漏洞
    尽管各个浏览器都遵循都远策略,可是通过一些奇淫巧计会绕过同源的限制进行跨域。举个例子UC浏览器跨本地域XSS可盗取任意域Cookie ,一段js代码本来是普通http域的权限,可是用过下载页面的一个xss,从而具有了file域的权限,而file域对权限限制也不严格,允许从file域跨到任意一个http域权限去执行js代码,经过了两次跨域操作,最终实现了普通http域向任意一个域注射js的目的,同源策略被完全破坏。
    4.最严重的跨域——跨特权域
    所有跨域行为中最严重的莫过于跨特权域。在客户端中,有一些域的权限比较高,例如file://这个协议域,ie中允许调用ActiveX执行cmd,Webkit中可以读取磁盘上的文件。另外还有客户端自定义的特权域,例如Chrome的chrome://downloads/域,有着执行exe的权限。这事儿太严重了,这不仅意味着任意一个网站都可以浏览/修改你的浏览器配置,而且可以不经你同意上传文件,甚至会在你的电脑上安装木马。跨特权域最经典的例子莫过于黑哥去年讲的 《跨过的那些客户端》。

    讲到这里题主应该理解了吧。
     
    同源策略是浏览器最核心也最基本的安全功能

    首先:web是开放的世界, 需要互联链接. 你的网站, 可以使用别人的图片, img,
    使用别人 script 做统计, 做广告联盟

    假设没有同源, 互联网世界是什么样?
    • 链接跳转导致的问题.

    , 放一个链接到 icbc.com, 然后 window.open来打开, 获取窗口句柄, 然后可以拥有对这个页面完全的控制权. 拦截表单,捕获数据,将账号密码上传到a.com.

    • ajax请求, 要啥就有啥.
    你登录jd.com; 然后打开a.com, 通过ajax 请求 的用户信息接口, 这时候因为访问的jd.com,所以浏览器自动带上了jd的cookie,然后获取到你的订单list ,昵称, 所有私密信息.

    所以,需要要同源策略
    在同一个域内,客户端脚本可以任意读写同源内的资源,dom,cookie;但是不同的域,就不行.

    链接:https://www.zhihu.com/question/25427931/answer/55286639

  • 相关阅读:
    position之属性
    Grid网格布局
    position 属性指定了元素的定位类型
    注册表单
    简单页面
    自我介绍
    正则表达式
    Dom和Bom
    颜色和单位
    伪类和伪元素的区别
  • 原文地址:https://www.cnblogs.com/yanan-boke/p/6855748.html
Copyright © 2020-2023  润新知