关于Django的CSRF保护的问题

时间:2011-05-20 00:49:05

标签: django security csrf

该文档有here的解释,但我还有一些其他问题。

为什么需要专用的CSRF cookie?

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

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

This webpage似乎暗示CSRF nonce需要绑定到会话ID(例如,CSRF nonce =会话ID的键控哈希)。这是为什么? Django是否将其CSRF随机数绑定到会话ID?

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

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

2 个答案:

答案 0 :(得分:3)

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

以下是一些差异:

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

答案 1 :(得分:0)

  1. CSRF 是一种用于您的网络应用的身份验证令牌。
  2. 用于防止 CSRF 攻击。
  3. 不使用会话也可以使用基于 CSRF 令牌的 身份验证系统。

有关 CSRF 的更多信息,请阅读以下链接。 https://docs.djangoproject.com/en/3.2/ref/csrf/