作为cookie的初学者,CSRF和Django(使用1.4),从我可以看出它是如何工作的,请纠正我出错的地方......
以下适用于MIDDLEWARE_CLASSES元组中包含django.middleware.csrf.CsrfViewMiddleware的地方。
如果POST表单包含csrf_token
标记,并且相关视图将RequestContext
传递给模板,请求页面意味着Django包含一个包含字母数字字符串的隐藏表单字段。 Django还会向浏览器返回一个名称设置为csrftoken
的cookie,并将值设置为相同的字母数字字符串。
当收到表单提交时,Django会检查隐藏表单字段中的字母数字字符串值是否匹配以及从浏览器收到的csrftoken cookie。如果它们不匹配,则发出403响应。
CSRF攻击可能以包含iframe的恶意网站的形式出现。 iframe包含POST表单和一些JavaScript。表单的action
属性指向我的Django站点。该表单旨在在我的站点上做一些讨厌的事情,并且在加载iframe时JS提交表单。
浏览器会在表单提交的标题中包含csrftoken
Cookie。但是,表单不会包含带有匹配的字母数字字符串的隐藏字段,因此返回403并且攻击失败。如果iframe JS试图访问cookie,以便创建正确的hiddden表单字段,浏览器将阻止它这样做。
这是对的吗?
答案 0 :(得分:1)
我认为你想要的东西在官方的Django文档中有所描述。 https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-it-works
当我尝试时,上面的链接被破坏了,但是对于1.7版本,它可以工作: https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/
答案 1 :(得分:0)
我会说你是对的。你会发现here我自己的表述。
总结: