【问题标题】:What is the role of Django csrf token? [closed]Django csrf token 的作用是什么? [关闭]
【发布时间】:2017-10-09 23:56:17
【问题描述】:

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

我是否遗漏了一些额外的步骤来确保令牌始终是唯一的?

【问题讨论】:

  • 破解您的表单?请解释一下这个场景!

标签: python django django-csrf


【解决方案1】:

CSRF token只有ensures 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 保护无法防御中间人攻击, 所以使用带有 HTTP 严格传输安全的 HTTPS。它还假设 验证 HOST 标头并且没有任何跨站点 您网站上的脚本漏洞(因为 XSS 漏洞 已经让攻击者做任何 CSRF 漏洞允许的事情,并且 更糟)。

【讨论】:

    【解决方案2】:

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

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

    现在您收到了 csrf 错误消息,因为 csrf 令牌依赖于 SECRET_KEY

    阅读更多docs

    【讨论】:

    • 我用它来支持表单提交而不是日志记录,所以当我测试时,我只使用与第一次提交时相同的密钥,它就可以工作。当然,如果我删除或更改密钥,它将失败。
    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2017-05-26
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2020-07-11
    • 2010-10-05
    相关资源
    最近更新 更多