gpt4 book ai didi

django - 我应该在我的 django 注销 View 中使用 @csrf_protect 和中间件吗

转载 作者:行者123 更新时间:2023-12-04 19:15:45 24 4
gpt4 key购买 nike

我有一个自定义注销 View 。我添加了如下装饰器

from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_protect
from django.views.decorators.http import require_POST
from django.contrib.auth.views import logout_then_login

@csrf_protect
@require_POST
@never_cache
def logout(request):
nxt=request.POST.get('next')
print 'next=',nxt
return logout_then_login(request, nxt)

在我的设置文件中,我有以下中间件类
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)

由于这里包含 CsrfViewMiddleware,我真的需要 @csrf_protect 来显示我的 View 吗?如果我同时使用两者,会不会有问题/冲突?

顺便说一句,当我检查 django source 时,我发现装饰器仅适用于登录 View ,而不适用于任何注销,login_then_logout View 。这是为什么呢?

任何帮助最受欢迎

最佳答案

中间件为您提供对所有 View 的全面保护 - 添加装饰器是多余的。 Django 文档建议在装饰器上使用中间件,因为它提供了更好的保护。

Use of the decorator by itself is not recommended, since if you forget to use it, you will have a security hole. The 'belt and braces' strategy of using both is fine, and will incur minimal overhead.



装饰器不用于您提到的 View ,因为如果触发 login_then_logout 事件, session 被 CSRF 劫持的风险很小甚至没有,并且一旦 session 被破坏,用户就没有安全风险。

你似乎有很多关于 CSRF 的问题 - 我可以建议你关注 Django's CSRF documentation和 CSRF 在 general ?

关于django - 我应该在我的 django 注销 View 中使用 @csrf_protect 和中间件吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9936119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com