Django框架配置全局和局部csrf跨站请求伪造

鳄鱼君

发表文章数:615

热门标签

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python » Django框架配置全局和局部csrf跨站请求伪造

Django框架中的CSRF原理这篇文章中, 我们已经知道,如果不注释掉django.middleware.csrf.CsrfViewMiddleware的话,django会在全局的POST请求中添加token验证,不带就会报错。那么这通常是不太好的,现在我们有两个不需要做token验证,那么我们需要单独进行配置,现在有10个不需要做token就需要配置10个,非常的麻烦。django给我们提供了一种方法,只需要对使用token验证的POST请求做一下配置就可以了,两者调换一下会方便很多。

跨站请求伪造

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。

  • @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
  • @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

注:from django.views.decorators.csrf import csrf_exempt,csrf_protect

那么简单理解,在需要进行token认证的函数上添加装饰器@csrf_protect,不需要认证添加装饰器@csrf_exempt。现在我们在全局中打开csrf注释,也就是所有的POST请求都需要token认证:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt   #当前函数不需要认证
def login(request):

    if request.method=='GET':
        return render(request,'login.html')
    if request.method=='POST':
        pass

如果注释掉全局的django.middleware.csrf.CsrfViewMiddleware,代表所有的函数都不需要token认证,那么在需要认证的函数上添加@csrf_protect装饰器即可。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架配置全局和局部csrf跨站请求伪造》 发布于2020-04-25

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

8 + 2 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册