在测试我用Django编写的应用程序时,我发现每次提交表单时都会抛出HTTP 403 Forbidden错误 . 我知道CSRF中间件检查带有CSRF令牌的cookie - 但是我的方法应该给予禁用cookie的用户?
我是否需要检查用户是否在我的每个视图中启用了Cookie,或者是否有更有效的方法?
提前致谢 .
This question dealt with Django pre-1.2 -- the solution is different if you have an older version.
4 回答
从Django 1.2开始,您可以使用CSRF_FAILURE_VIEW覆盖403响应 .
对于那些遇到同样问题的人:我发现最适合我的解决方案是编写一些显示通用403错误页面的中间件:
它指示用户错误页面最可能的原因是禁用了cookie(以及其他内容),因为我的应用程序实际上不会抛出403错误 . 我一直更喜欢“通过默默无闻的安全”方法,并在用户不应访问特定页面时抛出404错误 .
如果表单真的必须没有cookie,我想你只需要禁用CSRF中间件 . 你可能能够使用两个表单输入实现类似的东西,其中一个的值是随机的,另一个是第一个和秘密的哈希值 .
您是否尝试将csrf信息作为隐藏的POST变量传递?在我参与的项目中,通常使用隐藏的输入:
对不起PHP代码,我不记得如何在Django模板中做到这一点 .