当前位置:  开发笔记 > 编程语言 > 正文

响应头和浏览器cookie中csrf令牌的值不同.在django 1.9中csrf验证失败

如何解决《响应头和浏览器cookie中csrf令牌的值不同.在django1.9中csrf验证失败》经验,为你挑选了1个好方法。

大多数SO答案都要求清除cookie并确认中间件类.我已经尝试过了.

Python - 3.4
Django - 1.10
使用VirtualEnv.

Forbidden (403) CSRF verification failed. Request aborted.在Django管理员登录屏幕上收到错误.我用django 1.9版在pythonanywhere.com上托管了我的网站.

我已经清除了浏览器cookie.他们都是.

我重新加载了登录屏幕.获取请求.

在浏览器cookie中,到目前为止是空的,我的网站已经设置了一个值,其中csrf值为= XPp5hAhylAkt27U4SzGPNU7w8SFBJ3RP 在此输入图像描述

在响应标头中,设置cookie与cookie值=一起发送UT24544MghHLZi0IrGHQlCcpk1v0SbCy .表单的源代码中提供了相同的值. 在此输入图像描述

现在我输入了用户名和密码,然后单击登录按钮.

收到403错误CSRF验证失败.请求中止.

我重新检查了csrf令牌的所有值.

在请求标头CSRF cookie值= XPp5hAhylAkt27U4SzGPNU7w8SFBJ3RP 在此输入图像描述

在表单数据中csrf values = UT24544MghHLZi0IrGHQlCcpk1v0SbCy 在此输入图像描述

我已经在中间件类中使用了'django.middleware.csrf.CsrfViewMiddleware'.我清除了浏览器缓存和cookie.甚至重新启动了系统.

我在完全正常工作的不同网站上使用了完全相同的代码.

为什么有不同的csrf-token值?这个问题的解决方案是什么?

更新1:如果我在设置中设置debug = False,它可以正常工作.但是我不能保持它代码是活的.

更新2:经过进一步调查后,我发现某些浏览器cookie csrftoken的值未设置为正确的值,而该值正在响应头中传递.如果我从浏览器中删除cookie并将其从控制台设置为正确值,则发布请求可以正常工作.

更新3:现在我的网络应用程序上的每个帖子请求或表单提交都会发生同样的问题.响应头和源代码中发送的CSRF令牌值与浏览器cookie中设置的值不同.

更新4:设置CSRF_COOKIE_NAME ="csrf_token"也没有帮助.



1> Daniel Heppe..:

当浏览器尝试获取favicon时,将设置CSRF令牌的意外值.

您为favicon定义的网址似乎无效,显然,默认视图会处理不存在的网址.这会设置不同的CSRF cookie,但浏览器中显示的页面仍然在表单中具有初始CSRF令牌.

请求加载页面: 在此输入图像描述

请求加载favicon: 在此输入图像描述

您可以通过确保favicon存在来修复此特定错误.

请注意,当您链接的任何资源(例如图像)不存在时,此错误将会返回,因为您的应用程序呈现主页而不是返回404错误.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有