有 CORS 还需要 CSRF token 吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yodhcn

有 CORS 还需要 CSRF token 吗?

  •  
  •   yodhcn
    yodhcn 2024 年 7 月 3 日 via Android 3107 次点击
    这是一个创建于 661 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在现代浏览器环境,要防范 CSRF ,检查 origin 头就足够了吧?还需要 CSRF token 吗?

    第 1 条附言    2024 年 7 月 3 日
    https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html

    禁止简单请求
    当<form>使用标签提交数据时,它会发送浏览器未指定为“需要预检”的“简单”请求<form>。这些“简单”请求会带来 CSRF 风险,因为浏览器允许将它们发送到任何来源。
    第 2 条附言    2024 年 7 月 3 日
    总结,csrf 的防范是必要的,但不一定通过 csrf token ,还可以通过禁止“简单请求”来保证遵守同源策略,比如 hono.js 自带的 csrf 插件就是这样做的

    https://github.com/honojs/hono/blob/75c314c279f956f09948e61765a386bc4a7c3d5e/src/middleware/csrf/index.ts#L56

    此外,具有自定义标头的请求会自动遵守同源策略
    https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#custom-headers-and-cors
    10 条回复    2024-07-04 12:28:52 +08:00
    R4rvZ6agNVWr56V0
        1
    R4rvZ6agNVWr56V0  
       2024 年 7 月 3 日
    首先要明确 CSRF token 的定义:它是一个在服务器端生成并在客户端(通常是通过 HTTP cookie 或 HTML 表单)携带的随机值。当服务器接收到一个请求时,它会检查请求中的 token 是否与服务器保存的 token 匹配。由于这个 token 是在用户登录时生成的,攻击者无法预知其值,因此无法构造有效的 CSRF 攻击

    其次要知道 Origin 头是可以被篡改的,而且还有非浏览器环境是可以不遵守同样的 Origin 头规则。

    结论,就是依然有必要。
    keakon
        2
    keakon  
       2024 年 7 月 3 日   1
    这 2 者作用不一样啊,CORS 是跨域的安全设置,你没跨域使用 xhr 、fetch 时不受影响。
    yodhcn
        3
    yodhcn  
    OP
       2024 年 7 月 3 日 via Android
    @GeekGao 但是,非浏览器环境 CSRF token 也同样没用啊?可以通过请求直接拿到 CSRF token 与 cookie
    R4rvZ6agNVWr56V0
        4
    R4rvZ6agNVWr56V0  
       2024 年 7 月 3 日
    @yodhcn 怎么没用,为何一定用 cookie ? 选择使用其他方式来传递 CSRF 令牌啊:HTTP Header 、URL 参数、Request Body
    wonderfulcxm
        5
    wonderfulcxm  
       2024 年 7 月 3 日 via iPhone
    @yodhcn csrf 不是防模拟提交的
    zjsxwc
        6
    zjsxwc  
       2024 年 7 月 3 日
    GPT:在不跨域且 CORS 限制有效的情况下,如果网站本身存在 XSS (跨站脚本)漏洞,攻击者就有可能利用这个漏洞来注入恶意脚本,从而在合法的页面中执行恶意操作。
    例如,如果网站的某个输入框没有对用户输入的内容进行充分的过滤和验证,攻击者可以在输入框中提交一段恶意的 Javascript 代码。当其他用户访问包含这个输入内容的页面时,浏览器会执行这段恶意代码,从而实现诸如窃取用户会话信息、篡改页面内容、发送非法请求等恶意行为。
    所以,即使在同一域名下,如果存在 XSS 漏洞,只要 CORS ,不做 CSRF 防护也可能被攻击。
    AloneHero
        7
    AloneHero  
       2024 年 7 月 3 日 via Android
    楼上是不是没明白楼主的问题,明显楼主想问只依靠 CORS 机制加检查 origin 的情况下能否防得住 CSRF 。结果不明所以的乱答一堆,然后没由来的得出一个结论。。。
    hugepizza
        8
    hugepizza  
       2024 年 7 月 3 日
    不一定要 CSRF token, CSRF 本意就是跨站请求攻击,都不允许跨站了还怎么跨站攻击
    至于非浏览器环境怎么样 那就不是防 CSRF 的讨论范围了 honojs 那个本质就是过滤 origin
    accelerator1
        9
    accelerator1  
       2024 年 7 月 4 日
    CSRF (跨站点请求伪造)能实施主要依靠两点,1:请求参数可预测,2:身份鉴权信息自动携带。
    第 1 点的防范主要靠表单中添加服务端生成的随机参数,第 2 点主要靠 cookie 的自动发送实现,防范手段就是将认证信息由 cookie 传输改为 header 传输,header 只能代码添加到请求中。

    CORS (跨源资源共享),用于跳过浏览器对跨域请求的限制。

    两者有什么关联关系。
    r4aAi04Uk2gYWU89
        10
    r4aAi04Uk2gYWU89  
       2024 年 7 月 4 日
    没有其他 xss 漏洞的情况下,其实同源策略是可以预防 CSRF 的。在 xss 漏洞存在的情况下,你在 malicious.site 加载一个 iframe 访问 normal.site ,脚本拿 cookie 构造请求,这种情况下,如果有 CSRF Token ,是可以预防的。

    常规做法就是 CSRF Token + samesite cookie 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1144 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 00:00 PVG 08:00 LAX 17:00 JFK 20:00
    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