gpt4 book ai didi

django 使用链接或表单注销以防止 csrf 漏洞

转载 作者:行者123 更新时间:2023-12-04 05:52:20 30 4
gpt4 key购买 nike

阅读时djangobook chapter ,我遇到了提到 csrf 漏洞的部分,其中注销链接被放置在隐藏的恶意站点中。

在我使用 django 创建的 Web 应用程序中,我使用了类似的注销链接

基地.html:

<a  href="{% url my_logout %}" > Logout </a>

my_logout url 指向 django.contrib.auth.views.logout_then_login
urlpatterns=patterns('django.contrib.auth.views',
url(r'^logout/$', 'logout_then_login', {}, name = 'my_logout'),
)

现在,读了csrf攻击后,我担心恶意网站也会给我带来麻烦。所以,我想用一个表格来做注销。

我以为我可以这样做

基地.html:
    ...

<form method="post" action=".">{% csrf_token %}
<input type="hidden" name="next" value="{{next}}" />
<input type="hidden" name="confirm" value="true" />
<input type="submit" value="Logout" />
</form>
...

现在,我应该如何编写处理这个表单的 View ?如果我要处理隐藏变量( confirm 来检查是否应该注销, next 去上一个 View ),我是否仍然可以使用 django.contrib.auth.views.logout_then_login方法?

有人可以告诉我我这样做是否正确?

提前致谢

最佳答案

你可以把它包起来

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

@csrf_protect
@require_POST
@never_cache
def safer_logout(request):
# 'confirm' is useless here, POST implies 'do it'
return logout_then_login(request, request.POST.get('next'))

另外,考虑使用 SESSION_COOKIE_HTTPONLY

关于django 使用链接或表单注销以防止 csrf 漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9930068/

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