V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuhuihao
V2EX  ›  程序员

关于浏览器接口请求为什么要有同源策略的疑问

  •  1
     
  •   liuhuihao · 2023-10-10 11:51:38 +08:00 · 1968 次点击
    这是一个创建于 400 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚刚看坛子里问的跨域的问题,突然间思考的一个问题

    浏览器接口请求的同源策略本身是为了防 A 网站非法调用 B 网站的接口,防止例如 A 网站是个冒牌的银行网站,然后调用 真银行的接口获取用户名密码一类的。

    但是反代可以绕过同源策略,A 网站只需要在自己的后台搭一套反向代理去请求 B 网站,一样可以骚操作模拟别的网站哈,感觉 接口请求的同源策略也是 防君子不防小人哈哈,没啥卵用哈?

    求解

    20 条回复    2023-10-11 01:22:12 +08:00
    heelerdeer
        1
    heelerdeer  
       2023-10-10 11:56:19 +08:00
    gpt 是这么回复的:
    您提出的观点部分正确,同源策略确实无法完全阻止所有可能的安全威胁,尤其是当恶意方拥有一些技术手段时。反代(反向代理)可以绕过同源策略,但值得注意的是,反代本身也有一些限制和安全措施:

    需要授权:如果一个网站要通过反代访问另一个网站的接口,通常需要在反代服务器上配置授权和认证机制,确保只有合法的请求被允许通过。这可以包括使用 API 密钥、令牌或其他身份验证方法来验证请求。

    服务器配置:目标网站的服务器也可以配置限制措施,例如 IP 白名单或防火墙规则,以限制哪些 IP 地址可以访问它的接口。这有助于阻止恶意反代请求。

    安全漏洞:如果反代服务器存在安全漏洞或配置错误,恶意方仍然可能会绕过同源策略,并利用这些漏洞进行攻击。因此,保护反代服务器的安全也是非常重要的。

    尽管同源策略不能完全防止所有可能的攻击,但它仍然是 Web 安全的一部分,它可以有效阻止许多常见的跨站点攻击,例如跨站脚本( XSS )和跨站点请求伪造( CSRF )。同源策略提供了一层基本的安全性,但安全问题通常需要多层次的防御机制来应对不同类型的威胁。

    总之,虽然同源策略不是绝对的安全措施,但它在 Web 安全中仍然具有重要作用,结合其他安全措施和最佳实践,可以帮助减少恶意行为的风险。
    EMMMMMMMMM
        2
    EMMMMMMMMM  
       2023-10-10 11:59:16 +08:00   ❤️ 4
    反代你拿得到 cookie 么? 想啥呢
    nothingistrue
        3
    nothingistrue  
       2023-10-10 12:05:46 +08:00   ❤️ 2
    同源策略是浏览器端的安全控制措施,不是服务器端的,你反代个毛蛋。
    NessajCN
        4
    NessajCN  
       2023-10-10 12:09:40 +08:00
    你自己搭一个试试就知道有没有用了
    AoEiuV020JP
        5
    AoEiuV020JP  
       2023-10-10 12:16:46 +08:00
    我也觉得这个同源策略太严格了,没必要,
    大不了 cookie 之类不让用就是了,但 CORS 居然直接阻断请求,搞得一些涉及爬虫功能的 app 都无法实现网页版,
    v2yllhwa
        6
    v2yllhwa  
       2023-10-10 12:21:29 +08:00 via Android
    举个例子,用户家里的光猫/路由器,192.168.1.1 ,你让别人随便访问试试,全是洞🤣
    thinkershare
        7
    thinkershare  
       2023-10-10 12:25:25 +08:00
    如果没有 Same-origin policy ,就需要彻底禁用掉 JavaScript, 甚至禁用掉 JavaScript 也不能解决一些致命的安全缺陷。
    不使用同源策略,各个网站之间完全可以替代用户做任何事情,在未经过用户的同意下。
    同源策略主要是解决帮助浏览器的最终用户消除信任问题,确保针对服务器的请求是服务器自主提供+用户主动提供,而非其它网站的恶意操作。
    thinkershare
        8
    thinkershare  
       2023-10-10 12:27:58 +08:00
    另外同源策略是一大堆策略,不只是 javascript 发起的请求受到同源策略限制,浏览器上几乎所有跨站点的操作都受到同源策略限制,没有同源策略,浏览器这个代理基本上就废掉了。任何时候浏览器都只能允许打开一个单一的站点,而且关闭后还需要清空所有信息才能确保安全。
    MossFox
        9
    MossFox  
       2023-10-10 12:34:00 +08:00
    反代理创建的是一个和直接访问官网不同的域,Cookie 和其他存储不通用。
    意味着你需要额外让用户在你的反代页面完成用户登录才可以拿到用户凭据,而且这个过程中反代理规则里面会需要好多必要的关键字替换才行,不然现在的网页应用大概率会跑不起来。
    高校的那种 Web VPN 就算是做得成功的典型,很多现代框架构建的网页应用也能保证正常运行和正常代理,很好奇是怎么做到的。
    fantathat
        10
    fantathat  
       2023-10-10 12:59:23 +08:00 via iPhone
    目的主要是为了限制请求非本网站的资源以避免泄漏,即确保所有跑着的代码都是网站所提供的而不是非法的代码或者资源,别的网站可不能获取本站的数据,并控制本站的行为,在不知情的情形下,除非授意如此。
    mxT52CRuqR6o5
        11
    mxT52CRuqR6o5  
       2023-10-10 13:04:21 +08:00
    没有同源策略,我直接写个网站跨域调用银行转账接口,访问我的网站的人的钱就会被我偷偷转走,在线银行就都可以关门了就不存在了
    dzdh
        13
    dzdh  
       2023-10-10 14:31:18 +08:00
    @AoEiuV020JP 有没有一种可能,就是为了防 web 爬虫才有的同源安全策略。
    cogear
        14
    cogear  
       2023-10-10 14:39:46 +08:00
    2 楼正解,浏览器请求是会带上 cookie 的,所以要同源策略阻止 A 网站请求 B 接口时自动带上用户浏览器里的 cookie 。
    你的反代服务器又拿不到用户浏览器里的 cookie
    dsb2468
        15
    dsb2468  
       2023-10-10 14:42:15 +08:00
    假设一个前提:baidu.com 域名下任意地址存在漏洞,被人上传了一个恶意页面进行展示。

    如果浏览器没有同源策略限制,那你可能由于对 baidu.com 域名的信任,在浏览 baidu.com 域名下的恶意页面时,不会察觉任何异常,而这个恶意页面上的 JS 代码就可以直接操作 weibo.com ,自动转发一堆广告内容。

    如果有同源策略限制,上述情况就不会发生。
    lcy630409
        16
    lcy630409  
       2023-10-10 17:15:30 +08:00
    你思维钻了牛角尖
    浏览器 是一个面向大众的
    你的提问思想 好像是站在站长的角度

    打个比方,如果没有同源限制的浏览器大行其道,会出现什么情况呢,我用高仿域名 或者用转发 这种看不到域名的情况下,在网页里用 iframe 套一下银行的界面,那么你浏览的时候 看到的绝对是真实的银行界面,操作也能正常进行,转账 必定能收到银行的短信 ,但是呢 没有同源策略 我就可以读取你的登录信息 你的 cookies 等等,在你的浏览器中冒充你操作 在你发觉不了情况下 你只是转了 100 块给你媳妇,然后 顺带的转了 1000 给我指定的账号
    codehz
        17
    codehz  
       2023-10-10 17:50:03 +08:00
    @AoEiuV020JP 还记得之前那啥 XXX 大炮事件吗,在百度首页加了一个外链图片,每个访问百度的用户都会去尝试访问这个地址,然后。。。
    @thinkershare 唯一的例外就是图片加载,特指 img 标签直接写的情况,虽然 js 拿不到图片数据,但是图片仍然会被加载并显示,而服务端还不一定能检测到这样的外链(可以设置 referrerpolicy="no-referrer")
    dode
        18
    dode  
       2023-10-10 17:59:52 +08:00
    反代域名不一样,cookie 和正版网站相互独立,不会无感知被劫持
    stardustsky
        19
    stardustsky  
       2023-10-10 18:05:34 +08:00
    学学网络安全你就知道了
    Al0rid4l
        20
    Al0rid4l  
       2023-10-11 01:22:12 +08:00   ❤️ 1
    不如先想一想假如没有同源策略会怎么样? 今天你在马云家买了个飞机杯, 不巧 localstorage 中保存了你的购买记录, 明天强东家的 JS 读取到了这个购买记录, 于是强东家也向你推荐飞机杯. 你打开了百度查了点东西, 于是百度也知道了你的口味. 要是存的不是购买记录是用户 token 呢?

    同源策略从来就没说是为了防止 XSS 和防非法请求而诞生的, 这不是人家的设计意图而是自己想当然的理解...同源策略始终是围绕资源和域这两个概念, 说的是资源隔离. 接口是资源, cookie, localstorage 也是资源, 至于所谓防 XSS 和防非法请求只不过是资源隔离顺带的副作用

    浏览器许多安全机制, 有些问题是同源策略解决的, 有些问题是 CSP 解决的, 有些问题是 HSTS 解决的, 每个机制都有自己的边界, 但总有一部分问题是需要开发人员自己解决的

    几个经典迷惑行为/问题, 都有的话可以出院了
    我钱包掉了别人岂不是可以拿到我的钱?
    我手机掉了别人岂不是可以拿我手机支付?(防杠:假设小额免密)
    自签一个证书抓包还要问 HTTPS 有什么用, 不也防不住抓包吗
    自己打开控制台执行一个 alert, 看我 XSS 成功了哈哈哈我 NB 吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5712 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:15 · PVG 11:15 · LAX 19:15 · JFK 22:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.