越学越懵,同源策略到底是为了保护浏览器还是服务器? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Get Google Chrome
Vimium 在 Chrome 里使用 vim 快捷键
James369
V2EX    Chrome

越学越懵,同源策略到底是为了保护浏览器还是服务器?

  •  1
     
  •   James369 2021-09-30 09:49:50 +08:00 3360 次点击
    这是一个创建于 1548 天前的主题,其中的信息可能已经有所发展或是发生改变。
    按道理讲,同源策略限制浏览器访问不同源的资源,从而保护浏览器端,比如防止 XSS 跨站脚本攻击。
    但是,现在服务器又搞了一个 Access-Control-Allow-Origin,那如果恶意攻击的服务器都返回 Access-Control-Allow-Origin:*,那启不是对浏览器很危险?

    确实有点懵...
    13 条回复    2021-10-28 21:51:47 +08:00
    mxT52CRuqR6o5
        1
    mxT52CRuqR6o5  
       2021-09-30 09:51:21 +08:00 via Android
    是为了保护用户
    mxT52CRuqR6o5
        2
    mxT52CRuqR6o5  
       2021-09-30 09:52:27 +08:00 via Android
    你访问钓鱼网站时,同源策略限制网站无法在后台偷偷调用支付宝转账接口把你的钱转走
    James369
        3
    James369  
    OP
       2021-09-30 09:54:50 +08:00
    @mxT52CRuqR6o5 那 CORS 跨域是否会让同源破防?
    mxT52CRuqR6o5
        4
    mxT52CRuqR6o5  
       2021-09-30 10:17:06 +08:00
    @James369 能具体描述一下你所说的的”同源破防”吗?
    tabris17
        5
    tabris17  
       2021-09-30 10:18:01 +08:00
    @James369 这不叫破防,这叫授权跨域
    lscexpress
        6
    lscexpress  
       2021-09-30 10:23:57 +08:00
    那如果恶意攻击的服务器都返回 Access-Control-Allow-Origin:*,那启不是对浏览器很危险?

    大哥,如果是培训班的多写几个项目。如果才进入职场,问问周围同事。浏览器请求服务端,服务端再响应浏览器,不是哪个服务器来请求浏览器。( websocket 不提,websocket 也是浏览器主动建立连接)

    好奇是好事,好奇就去看文档,Google 查。
    chezs66
        7
    chezs66  
       2021-09-30 10:27:47 +08:00
    首先,浏览器和服务器都没有价值,保护用户才有意义。
    考虑两个经典场景
    1.用户打开钓鱼网站:钓鱼网站尝试向源站点发起请求,因此一方面需要浏览器主动拒绝 response (同源策略),同时需要服务端防御 CSRF 攻击。
    2.用户打开正经网站:部分数据被污染,因此需要防御 XSS 攻击
    mxT52CRuqR6o5
        8
    mxT52CRuqR6o5  
       2021-09-30 10:32:32 +08:00
    @James369
    浏览器会默认限制跨域的访问(只有简单请求不会被跨域策略限制),如果确实需要跨域访问,则需要被访问的网站显式的在 response 返回 Access-Control-Allow-XXX 的 header 显式的声明允许谁跨域访问允许怎样的跨域访问
    因此服务器无脑返回 Access-Control-Allow-Origin:*确实是很危险的行为
    (当然上古时代还有个 jsonp 的跨域方案,现在似乎都不推荐了)
    rationa1cuzz
        9
    rationa1cuzz  
       2021-09-30 10:36:37 +08:00
    个人理解:首先同源策略是用来保护用户,方式跨站伪造请求和 xss 的,既不是保护浏览器也不是保护服务器。其次,Access-Control-Allow-Origin:*,等于服务器放弃限制,对于一些安全要求不高的无所谓的。
    libook
        10
    libook  
       2021-09-30 12:39:40 +08:00   7
    同源策略是用来保护客户端的。

    先了解三个基本原理:
    1. 浏览器会根据请求的域来记录 Cookies,当发出请求的时候,同样会携带与请求的域对应的 Cookies ;
    2. 用户登录会话信息通常记录在 Cookies 中;
    3. 每个网页都有一个主要的 Document 对象,而浏览器会将当前页面的域记录在 Document 对象的一个描述当前域的属性中。

    假设没有同源策略:
    1. 用户在网银网站登录,登录会话存储在网银网站域对应的 Cookie 里;
    2. 用户访问钓鱼网站,钓鱼网站直接在浏览器端请求网银接口进行转账,浏览器自动读取了网银网站域的 Cookie,随请求一同发到网银服务器。
    3. 网银服务器收到了请求,验证 Cookies 有效,即进行了转账操作。

    假设网银接口服务器正确配置了 CORS 头信息,而浏览器的同源策略也能正常工作的话,第 2 步就会变成:
    用户访问钓鱼网站,钓鱼网站尝试令浏览器请求网银接口进行转账,浏览器会先向网银网站的服务器询问 CORS 头,得知仅允许网银网站域请求,读取当前网页域为非网银网站域,则拒绝发出请求到网银服务器。

    当然 WebStorage 也是按域存储和访问的,只不过不会自动随请求发送而已,会限制同一域的网页才能访问 WebStorage 的内容。

    这套机制的有效性,建立在如下基础上的:
    1. 用户用的浏览器是正规的、严格按照同源策略标准开发的;
    2. DNS 没有被劫持,或开启了 TLS 验证,即不可能伪造相同的域;
    3. 接口服务器正确配置了 CORS 头。
    以上三项任意一项有问题都会使得同源策略失效。

    当然 Web 安全是一套体系,同源策略只是其中一个机制,用于防范某几个安全风险,就像一个拼图,虽然防不了所有的攻击手段,但所有拼图都拼全了就能有完整的防御性了。
    James369
        11
    James369  
    OP
       2021-09-30 13:51:46 +08:00
    @libook 看完你这么一说,我突然有种提壶灌顶的感觉,也就是说服务方 为了确保用户是从自己的网页发起的正当请求(才给放行),其它地方过来的非法请求都可以用 Access-Control-Allow-Origin 来进行屏蔽。 (刚开始我还以为是服务器为了防止第三方盗链或者盗用接口而做的设定)。
    那么,也可以想像为什么那么多国内厂商争先恐后的去做浏览器,这个浏览器的权限真是太大太重要了,简直就是一个操作系统。
    dengshen
        12
    dengshen  
       2021-09-30 15:47:57 +08:00 via iPhone
    现在网银转账都需要手机验证码了。还会校验 ip 是否是常用的 ip 地址。
    alexkkaa
        13
    alexkkaa  
       2021-10-28 21:51:47 +08:00 via Android
    同源是为了在重要页面保证安全。但是在需要某些跨站请求的情况下比如某些 flash flv jsonp 等最好做成一个接口而不是页面 而且可以采取子域名
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2589 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:54 PVG 22:54 LAX 06:54 JFK 09:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86