作为cookie,CSRF和Django(使用1.4)的初学者,从我可以确定的是它是如何工作的,请纠正我哪里出错了...

以下内容适用于MIDDLEWARE_CLASSES元组中包含django.middleware.csrf.CsrfViewMiddleware的情况。

如果POST表单包含csrf_token标记,并且相关 View 将RequestContext传递到模板,则请求页面意味着Django包含一个包含字母数字字符串的隐藏表单字段。 Django还向浏览器返回一个cookie,该cookie的名称设置为csrftoken,值设置为相同的字母数字字符串。

收到表单提交后,Django会检查来自隐藏表单字段的字母数字字符串值是否与从浏览器接收到的csrftoken cookie匹配。如果它们不匹配,则会发出403响应。

CSRF攻击可能以包含iframe的恶意网站的形式出现。 iframe包含POST表单和一些JavaScript。表单的action属性指向我的Django网站。该表单旨在在我的网站上做一些令人讨厌的事情,并且在加载iframe时,JS会提交该表单。

浏览器将在表单提交的标题中包含csrftoken cookie。但是,该表单将不包括带有匹配字母数字字符串的隐藏字段,因此返回403,并且攻击失败。如果iframe JS试图访问cookie,以创建正确的隐藏表单字段,则浏览器将阻止它这样做。

这样对吗?

最佳答案

我会说你是对的。您会发现here是我自己的公式。

总结一下:

  • CSRF token 是从代码发送的,这意味着恶意代码必须知道它。
  • CSRF token 存储在cookie中,并由浏览器发送。
  • 由于同源策略,攻击者无法访问cookie。
  • 服务器可以简单地验证来自cookie的“安全”值是否与来自代码的值相同。
  • 关于django - 这是Django的CSRF保护的工作方式吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11615958/

    10-16 22:47