gpt4 book ai didi

javascript - javascript客户端设置CSRF token不安全吗?

转载 作者:行者123 更新时间:2023-11-29 10:56:07 26 4
gpt4 key购买 nike

在我看来,CSRF 的主要目标是确认发出请求的客户端是我们期望的客户端。

我常见的解决方案是:

  1. 服务器生成随机 CSRF Token
  2. 服务器在 cookie 中设置 CSRF token
    1. 服务器在生成表单时将 CSRF token 注入(inject)到表单中或者
    2. 服务器将 CSRF token 传递给 javascript,然后 javascript 将 CSRF token 作为 header 注入(inject) XMLHTTPRequests
  3. 收到请求后,通过检查 cookie 中的 CSRF token 是否与 header /表单值中的 CSRF token 相匹配来验证请求。

服务器为 (3)(1) 生成 CSRF 对我来说很有意义,但我想不出为什么它对于 (3)(2) 是必要的。

相反,如果客户端是纯 javascript,我相信这是安全的:

  1. Javascript 生成一个随机的 CSRF token
  2. Javascript 在 cookie 中设置 CSRF token
  3. Javascript 在发出 XMLHTTPRequest 时在 header 中传递 CSRF token
  4. 服务器检查 header 中的 CSRF token 是否与 cookie 匹配

我的理解是,3 和 4 都是攻击者无法做到的事情,因此这也足以阻止攻击。对吗?

如果那是安全的,我们还需要执行步骤 (1) 和 (2) 吗?由于同源策略(假设 cors 配置正确),这是否也安全?

  1. Javascript 在 XMLHTTPRequest 中设置“CSRF-Safe: true” header
  2. 服务器检查 header CSRF-Safe 是否存在并设置为“true”

最佳答案

是的,在 CORS 和同源策略存在的情况下,这两种简化方法都应该是安全的。事实上,只要您验证内容类型,您甚至不需要 CSRF-Safe: true header 。

维基百科 confirms :

If data is sent in any other format (JSON, XML) a standard method is to issue a POST request using XMLHttpRequest with CSRF attacks prevented by SOP and CORS; there is a technique to send arbitrary content from a simple HTML form using ENCTYPE attribute; such a fake request can be distinguished from legitimate ones by text/plain content type, but if this is not enforced on the server, CSRF can be executed[12][13]

关于javascript - javascript客户端设置CSRF token不安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56861803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com