当前位置:  开发笔记 > 后端 > 正文

Django CSRF框架无法禁用并且正在破坏我的网站

如何解决《DjangoCSRF框架无法禁用并且正在破坏我的网站》经验,为你挑选了4个好方法。

django csrf中间件无法禁用.我从我的项目中间件中评论过它,但由于缺少CSRF问题,我的登录失败了.我正在使用Django主干.如果在中间件中未启用CSRF,CSRF如何导致问题?

我必须禁用它,因为我的网站上有很多POST请求,CSRF刚刚中断.有关如何在django主干项目中完全禁用CSRF的任何反馈?

来自Django主干的"新'CSRF框架也破坏了一个外部网站,它正在进入我正在给它们的URL上进行POST(这是一个宁静的API的一部分.)我无法禁用CSRF框架我之前说过,我该如何解决这个问题?



1> 小智..:

是的,可以禁用Django csrf框架.

要手动排除视图函数不被任何CSRF中间件处理,您可以使用django.views.decorators.csrf模块中的csrf_exempt装饰器.例如:( 见文档)

from django.views.decorators.csrf import csrf_exempt                                          
@csrf_exempt                                                                                  
def my_view:                                                                            
    return Httpresponse("hello world")

..然后{% csrf_token %}从模板中删除表单内部,或者如果您没有将其包含在表单中,请保留其他内容.


我同意这应该是公认的答案.通常,当API已经提供您需要的功能时,不要破解库.

2> shreddd..:

您可以在中间件中禁用它.

在您的settings.py中为MIDDLEWARE_CLASSES添加一行:

MIDDLEWARE_CLASSES = (

    myapp.disable.DisableCSRF, 

)

使用以下内容在myapp中创建disable.py

class DisableCSRF(object):
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)

基本上如果你在请求中设置_dont_enforce_csrf_checks,你应该没问题.


这也适用于Django Rest Framework.我在使用View和ResponseMixin时遇到了问题.

3> Aaron..:

请参阅下面的答案以获得更好的解决方案 自从我写这篇文章以来,已经发生了很多变化 现在有更好的方法来禁用CSRF.

我感觉到你的痛苦.框架改变这些基本功能是不可接受的.即使我想从现在开始使用它,我在同一台机器上有遗留站点共享django的副本.像这样的更改应该需要进行主要的版本号修订.1.x - > 2.x.

无论如何,为了修复它我只是评论它并且经常停止更新Django.

文件:django/middleware/csrf.py第160行:

            # check incoming token
#            request_csrf_token = request.POST.get('csrfmiddlewaretoken', None)
#            if request_csrf_token != csrf_token:
#                if cookie_is_new:
#                    # probably a problem setting the CSRF cookie
#                    return reject("CSRF cookie not set.")
#                else:
#                    return reject("CSRF token missing or incorrect.")



4> Hank Gay..:

通常,您不应该禁用CSRF保护,因为这样做会打开安全漏洞.如果你坚持,但......

最近,一种新的CSRF保护方式落在了主干上.您的网站是否仍然配置为按旧方式执行?以下是The New Way™的文档,以下是The Old Way™的文档.


新版本刚刚进入开发主干.您不应该为生产站点使用开发代码 - 或者如果您这样做,您应该在更新之前了解所有更改.
在他的辩护中,追踪`trunk`是推荐使用Django很长一段时间的方法.尽管情况发生了变化,但我确信仍有很多人仍然这样做.
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有