美文网首页
Python+Django框架学习(CSRF校验、静态文件、中间

Python+Django框架学习(CSRF校验、静态文件、中间

作者: 彬_哥哥 | 来源:发表于2024-05-28 15:41 被阅读0次
    CSRF校验和处理

    CSRF(Cross-siterequestforgery,跨站请求伪造),也被称为one-click attack或者session riding,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
    Django防止csrf的方式:
    默认打开csrf中间件
    表单post提交数据时加上{%csrf_token%}标签(通过效验)
    防御原理
    渲染模板文件时在页面生成一个csrfmiddlewaretoken的隐藏域
    服务器交给浏览器保存一个名字为csrftoken的cookie信息
    提交表单时,两个值都会发给服务器,服务器进行对比,如果一样,则csrf验证通过,否则失败
    注意:当启用中间件并加入标签csrf_token后,会向客户端浏览器中写入一条cookie信息,这条信息的值与隐藏域input元素的value属性是一致的,提交到服务器后会先由csrf中间件进行验证,如果对比失败则返回403页面,而不会进行后续的处理

    静态文件使用

    -修改项目目录中的配置文件settings.py

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        BASE_DIR/'static'
    ]
    
    Django中间件
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',  # 安全中间件
        'django.contrib.sessions.middleware.SessionMiddleware',  # 会话中间件,处理session
        'django.middleware.common.CommonMiddleware',  # 站点中间件,处理是否带斜杠的
        'django.middleware.csrf.CsrfViewMiddleware',  # CSRF保护中间件,跨站请求伪造的处理
        'django.contrib.auth.middleware.AuthenticationMiddleware',  # 认证中间件,提供用户认证服务
        'django.contrib.messages.middleware.MessageMiddleware',  # 消息中间件,基于cookie或者会话的消息功能
        'django.middleware.clickjacking.XFrameOptionsMiddleware',  # X-Frame-Options中间件,点击劫持保护]
    
    自带认证方式登录
    from django.shortcuts import render, redirect
    from django.contrib.auth import authenticate, login, logout  #用户名有效性验证 登入和登出
     
    from django.contrib.auth.decorators import login_required  # 验证用户是否登录
     
    def acc_login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("password")
            user = authenticate(username=username,password=password) # 验证用户名的有效性
            if user:
                login(request,user)  # 验证成功之后登录
                return  redirect('/test')
           return render(request, "login.html")
     
    def acc_logout(request):
        logout(request)  # 登出
        return redirect("/login")
      
    
    @login_required  # 加上这个装饰器就是限制必须登录才能执行这个函数,记得再项目中配置文件settings.py追加一下内容LOGIN_URL = '/login/'
    def dashboard(request):
        print(request.user)
        return render(request, "template/test1/list.html")
    

    相关文章

      网友评论

          本文标题:Python+Django框架学习(CSRF校验、静态文件、中间

          本文链接:https://www.haomeiwen.com/subject/jyuqqjtx.html