Django csrf令牌如何工作?

时间:2017-05-11 06:02:10

标签: python django django-csrf

我不清楚使用Django表单的csrf令牌。我在表单提交中有这个,我看到它是动态生成的。如果使用fiddler捕获我的会话并尝试在没有该令牌的情况下提交我的表单,则会收到403错误。但我不明白的是我可以使用fiddler使用相同的令牌提交尽可能多的数据,所以我不明白这个令牌的安全性。如果有人攻击您的表单,他们可以使用相同的令牌。

我是否缺少一些额外步骤以确保令牌始终是唯一的?

2 个答案:

答案 0 :(得分:3)

CSRF token ensures that only forms that have originated from trusted domains can be used to POST data back。因此,它不会验证数据或表单发送的数据量,但数据来自合法域(通常是您的站点)的表单。因此得名:Cross Site Request Forgery保护。

来自docs

  

每次用户登录时都会更改CSRF令牌。

     

使用Firebug,Chrome开发者“窃取”或修改您自己的令牌   工具等不是一个漏洞。

     

攻击者无法窃取用户浏览器的CSRF cookie。

如果某人有权(通过中间人攻击或xss)访问您的csrftoken Cookie,那么这是一个漏洞:

  

CSRF保护无法抵御中间人攻击,   所以使用HTTP与HTTP严格传输安全性。它也假定   验证HOST标头并且没有任何跨站点   您网站上的脚本漏洞(因为XSS漏洞)   已经让攻击者做了CSRF漏洞允许的任何事情   更糟糕的是。)

答案 1 :(得分:2)

然后你的应用程序准备表单,Django使用csrf令牌进行当前用户会话。因此,黑客只能破解为自己登录生成的表单。

要模拟atack,您可以尝试打开表单会话,键入内容,并在设置中更改SECRET_KEY,重新加载服务器并提交表单数据。

现在您已收到csrf错误消息,因为csrf令牌取决于SECRET_KEY

docs

中了解详情