关于Django的CSRF保护的问题

Enn*_*oji 6 security django csrf

文档在这里有解释,但我有一些额外的问题..

为什么需要专用的CSRF cookie?

如果Django不使用特定于事务的nonce,为什么不只是要求在POST请求体中嵌入会话ID?

为什么CSRF nonce必须绑定到会话ID?Django会这样做吗?

该网页似乎暗示CSRF现时需要绑定到会话ID(例如,CSRF nonce =会话ID的键控哈希).这是为什么?Django将其CSRF随机数绑定到会话ID吗?

为什么Django使用会话独立的nonce而不是特定于事务的nonce?

是因为性能问题吗?直观的交易特定的nonce本质上似乎更安全.

Tom*_*cki 4

CSRF 保护和会话具有不同的性质,因此将它们放在单个 cookie 中会使维护变得更加困难。

以下是一些差异:

  1. 您可以在不使用会话的情况下使用 CSRF 保护。
  2. 您可能希望在会话启动之前使用 CSRF(即,由于性能原因,您不想在用户登录之前启动会话,但您希望使用 CSRF 保护您的联系表单)。
  3. 有时您想删除会话 cookie,但可能永远不会删除 CSRF。
  4. 单个浏览器会话需要 CSRF 保护(直到您关闭浏览器),但会话可能会持续数周。
  5. 您可能想要进行跨域会话,但可能永远不需要跨域 CSRF。