V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fancy2020
V2EX  ›  信息安全

原来 CORS 并不会阻止一个请求被发送,而只是阻止前端读取 Response

  •  
  •   fancy2020 · 171 天前 · 1874 次点击
    这是一个创建于 171 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前一直以为设置了 CORS ,那么 Allowed Origin 之外的其他域名下的代码发送的请求就不会到达服务端。

    今天凑巧研究了一下 CSRF 的攻击过程,原来设置了 CORS 只会阻止前端代码读取 Response 的内容,但这个请求本身还是会被发送到服务端,并被处理。

    11 条回复    2023-11-08 19:47:30 +08:00
    Meiyun
        1
    Meiyun  
       171 天前
    不发送到服务端前端怎么知道有没有被允许?
    proxytoworld
        2
    proxytoworld  
       171 天前
    你是不是搞错了 cors 防 xss 的,csrf 防护对应的是 csrf token
    jiangzm
        3
    jiangzm  
       171 天前
    无知了哈,
    OPTIONS 请求不会阻止
    GET/POST 请求会阻止
    yumusb
        4
    yumusb  
       171 天前
    option 预检请求会被发送。
    jiangzm
        5
    jiangzm  
       171 天前   ❤️ 1
    即使 OPTIONS 返回了内容也会忽略。
    大概率你的服务端没有按标准 CORS 输出内容
    retanoj
        6
    retanoj  
       171 天前
    所以你知道了 Access-Control-Allow-Origin 这个 header 头是服务端设置并返回的对吧。
    事实上,为了解决 XS-*类的问题,还有其他很多机制是浏览器配合服务端一起实现的。
    比如 Fetch Metadata/ COOP / CORP
    limaofeng
        7
    limaofeng  
       171 天前 via iPhone
    一般情况下,httpserver 都不会拒绝客户端发送的请求。 那是防火墙的工作
    DOLLOR
        8
    DOLLOR  
       171 天前 via Android
    HTTP 报头的 referer 和 origin ,就是用来给服务端检查请求来源的。但估计大部分服务端开发都没这个意识,都是全盘放行。
    ETiV
        9
    ETiV  
       171 天前 via iPhone
    恭喜你学到了新知识 🎉
    we21x
        10
    we21x  
       171 天前
    这个我记得是分 简单请求 和 非简单请求,简单请求的响应跨域了话会被拦截,非简单请求预检过不了所以不会发送实际的请求。

    *区分简单请求和非简单请求:请求方法 和 content-type
    fancy2020
        11
    fancy2020  
    OP
       171 天前
    @jiangzm

    之前的确无知了,让您见笑了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5439 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:34 · PVG 16:34 · LAX 01:34 · JFK 04:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.