搜索

首页  >  问答  >  正文

了解 CSRF

我不明白使用“挑战令牌”如何增加任何形式的预防:什么值应该与什么进行比较?

来自 OWASP:

一般来说,开发者只需要 生成此令牌一次 当前会话。初始后 该代币的生成,其值为 存储在会话中并被使用 对于每个后续请求,直到 会话过期。

如果我正确理解了这个过程,就会发生这样的情况。

我登录 http://example.com 并创建一个包含此随机令牌的会话/cookie。然后,每个表单都包含一个隐藏输入,该输入还包含来自会话的随机值,该值在表单提交时与会话/cookie 进行比较。

但这能实现什么目的呢?您不是只是获取会话数据,将其放入页面中,然后将其与完全相同的会话数据进行比较吗?看起来像是循环推理。这些文章一直在谈论遵循“同源策略”,但这没有任何意义,因为所有 CSRF 攻击都与用户同源,只是欺骗用户做出他/她不希望的操作。

除了将令牌作为查询字符串附加到每个 URL 之外,还有其他选择吗?看起来非常丑陋且不切实际,并且使用户更难添加书签。

P粉056618053P粉056618053402 天前706

全部回复(2)我来回复

  • P粉794851975

    P粉7948519752023-10-24 11:47:30

    CSRF 通过类比解释 - 示例:

    • 您用钥匙打开家的前门。
    • 进去之前,先与邻居交谈
    • 当您正在进行此对话时,请在门未锁的情况下走进去。
    • 他们进去了,假装是你!
    • 你家里的人没有注意到任何不同 - 你的妻子就像是,“哦,混蛋*,他在家”。

    冒充者拿走了你所有的钱,也许在出去的时候玩了一些 Xbox......

    摘要

    CSRF 基本上依赖于这样一个事实:您打开了家门,然后将其打开,让其他人可以简单地走进来并假装是您。

    如何解决这个问题?

    当您第一次打开家门时,门卫会给您一张纸,上面写着一个很长且非常随机的数字:

    现在,如果你想进入自己的房子,你必须向门卫出示那张纸才能进去。

    所以现在当冒充者试图进入你的房子时,门卫会问:

    “纸上写的随机数是多少?”

    如果冒充者没有正确的数字,那么他就无法进入。要么他必须正确猜测随机数 - 这是一项非常困难的任务。更糟糕的是,随机数的有效期只有 20 分钟(例如)。所以知道模仿者必须猜对,不仅如此,他只有20分钟的时间才能得到正确答案。这实在是太费劲了!所以他放弃了。

    当然,这个类比有点牵强,但我希望它对你有帮助。

    **crud =(创建、读取、更新删除)

    回复
    0
  • P粉121081658

    P粉1210816582023-10-24 00:28:04

    攻击者无法获取令牌。因此请求不会生效。

    我推荐 Gnucitizen 的这篇文章。它有一个相当不错的 CSRF 解释: http://www.gnucitizen.org/blog/csrf-揭秘/

    回复
    0
  • 取消回复