2017-05-11 70 views
0

我不清楚使用Django表单的csrf标记。我在表单提交中有这个,我看到它是动态生成的。如果捕捉我的会议与提琴手,并尝试提交我的表单没有该令牌,我得到一个403错误。但我不明白的是,我可以使用提琴手来提交尽可能多的数据,因为我需要使用相同的标记,所以我不明白这个标记的安全性。如果有人剽窃你的表格,他们可以使用相同的标记。Django csrf标记如何工作​​?

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

+0

黑客你的表单?请解释这种情况! –

回答

2

然后你的应用程序准备好表单,Django为当前用户会话使用csrf标记。所以,黑客只能为自己的登录生成表单。

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

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

详情请阅读docs

+0

我使用它来支持表单提交而不是登录,所以当我进行测试时,我只是使用与第一次提交时相同的密钥并且它可以工作。当然,如果我删除或更改密钥,它会失败。 – rocketdoctor

2

CSRF tokenensures that only forms that have originated from trusted domains can be used to POST data back。因此,它不验证数据或表单发送的数据量,但数据来自合法域(通常是您的站点)的表单。因此名称:跨站请求伪造保护。

docs

每次CSRF令牌改变用户登录

“偷”或修改使用Firebug 自己令牌,Chrome浏览器开发 工具等。不是一个漏洞。

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

如果有人访问(通过中间人攻击或者XSS)您csrftoken cookie,那么这是一个漏洞:

的CSRF保护不能防止中间人中间人攻击, 所以使用HTTPS和HTTP严格传输安全。它还假设验证了HOST头部,并且在您的站点上没有任何跨站点 脚本漏洞(因为XSS漏洞已经让攻击者执行了CSRF漏洞允许的任何操作,而且 严重得多)。