我不清楚使用Django表单的csrf令牌。我在表单提交中有这个,我看到它是动态生成的。如果使用fiddler捕获我的会话并尝试在没有该令牌的情况下提交我的表单,则会收到403错误。但我不明白的是我可以使用fiddler使用相同的令牌提交尽可能多的数据,所以我不明白这个令牌的安全性。如果有人攻击您的表单,他们可以使用相同的令牌。
我是否缺少一些额外步骤以确保令牌始终是唯一的?
答案 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
中了解详情