这是Django的CSRF保护如何运作的?

mr_*_*r_c 10 django django-csrf

作为cookie的初学者,CSRF和Django(使用1.4),从我可以看出它是如何工作的,请纠正我出错的地方......

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

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

收到表单提交时,Django会检查隐藏表单字段中的字母数字字符串值是否匹配以及从浏览器收到的csrftoken cookie.如果它们不匹配则发出403响应.

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

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

它是否正确?

Jon*_*rin 1

我想说你是对的。你会在这里找到我自己的表述。

总结一下:

  • CSRF令牌是从代码中发送的,这意味着恶意代码必须知道它。
  • CSRF 令牌存储在 cookie 中并由浏览器发送。
  • 由于同源策略,攻击者无法访问该cookie。
  • 服务器可以简单地验证来自 cookie 的“安全”值是否与来自代码的值相同。