用于HTTP和HTTPS的Django CSRF

时间:2011-08-05 23:03:25

标签: django https csrf django-csrf

我有一个在HTTP和HTTPS后面运行的博客,并且遇到了csrf令牌验证问题。

CSRF令牌在每个表单中都应该是可用的,但是当我在网站的HTTP版本上并尝试提交注释时,我会收到以下错误。

禁止(403) CSRF验证失败。请求中止。

参与者检查失败 - http://mysite.com/blog/1/https://mysite.com/不匹配。

通过HTTPS查看博客时,它可以正常工作。

任何人都知道如何让验证与两者相匹配吗?

2 个答案:

答案 0 :(得分:1)

您可能需要检查设置以查看是否将CSRF_COOKIE_SECURE参数设置为True

这会将cookie标记为安全,并阻止浏览器通过非安全连接(即HTTP)接受它。

要检查这是否是问题的根源,您可以使用任何有效的视图并插入断言False以获取调试屏幕并查看Csrf cookie是否已发送或是否。

答案 1 :(得分:1)

我明白了。这是我的fastcgi参数的一个问题

fastcgi_param HTTPS on;

设置需要启用HTTPS的环境变量。当这个变量打开时,Django会对csrf标记执行一些额外的强制执行。