我正在测试我网站上的CSRF保护,我注意到了一些意想不到的事情。
我从表单中删除了{% csrf_token %}
,提交仍然有效。我无法理解为什么。然后我查看了源代码并意识到令牌仍然在<form>
元素旁边。我更改了表单的ID,以确保它确实更新了源代码,但是隐藏的输入仍然存在。
我正在使用Django 1.2。 {% csrf_token %}
还有必要吗?
干杯
富
答案 0 :(得分:4)
经过更多调查后,如果表单包含方法{% csrf_token %}
,则表示始终插入post
,而如果表单没有,则显示{{1}}。 Django非常聪明的自动保护。
答案 1 :(得分:2)
来自文档:
在Django 1.1中,模板标签不存在。相反,使用了重写POST表单以包含CSRF令牌的后处理中间件。如果您要从1.1版或更早版本升级网站,请阅读此部分和下面的Upgrading notes。
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#legacy-method