django 如何在DRF中实现CSRF对用户身份的保护,而无需登录

xeufq47z  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(132)

我在开发一个类似匿名公告板的应用程序。
该应用程序配置为react和django rest框架。
为了通过uuid的cookie来识别用户,我使用了如下自定义中间件:

import uuid
from django.contrib.sessions.middleware import SessionMiddleware
from django.http.request import HttpRequest
from django.http.response import HttpResponse

class CustomMiddleware(SessionMiddleware):
    def process_response(self, request: HttpRequest, response: HttpResponse) -> HttpResponse:
        user_id = request.COOKIES.get('user_id', None)
        if not user_id:
            max_age = 365 * 24 * 60 * 60
            response.set_cookie(
                'user_id',
                str(uuid.uuid4()),
                max_age=max_age,
                samesite='lax'
            )
        return super().process_response(request, response)

然后我在谷歌上搜索如何保护应用程序免受CSRF的攻击,但找不到它。
请教我最好的方法。
你好。
我试着使用会话和csrf令牌,但我没有任何想法。
我不知道如何在服务器上存储csrf令牌并验证它是否匹配。

icnyk63a

icnyk63a1#

为了保护你的应用免受CSRF攻击,你可以使用Django内置的CSRF保护中间件。该中间件检查每个POST请求中的特殊令牌。该令牌需要与任何POST请求一起发送,以便请求被接受。
确保在settings.py MIDDLEWARE部分中有CsrfViewMiddleware
'django.middleware.csrf.CsrfViewMiddleware',
如果你想从CSRF保护中免除任何视图,你可以使用@csrf_exemp装饰器:

from django.views.decorators.csrf import csrf_exempt

@csrf_exemp
def your_view(request):
    pass

我希望这对你有帮助。

相关问题