首页 > 其他分享 >csrf跨站请求CBV添加装饰器的多种方式

csrf跨站请求CBV添加装饰器的多种方式

时间:2023-01-02 14:45:30浏览次数:43  
标签:跨站 request 校验 auth django CBV user csrf

今日内容概要

  • csrf跨站请求伪造
  • csrf相关校验策略
  • CBV添加装饰器的多种方式
  • auth认证模块
  • BBS项目需求分析

今日内容详细

csrf跨站请求伪造

钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户 但是其中有一些猫腻
	eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户 并不是真正的四六级官方账户
        
模拟钓鱼网站案例:转账案例
	内部隐藏标签
 
思考:如何区分真假网站页面发送的请求

csrf校验策略

在提交数据的位置添加唯一标识 

1.form表单csrf策略
	form表单内部添加 {% csrf_token %}
2.ajax请求csrf策略
	// 方式1:自己动手取值 较为繁琐
   {#data:{'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},#}
   // 方式2:利用模板语法自动获取(一定要用引号引起来)
   {#data:{ 'csrfmiddlewaretoken':'{{ csrf_token }}','username':'jason'},#}
   // 方式3:直接引入一个js脚本即可(官网提供的)
 	参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html

csrf相关装饰器

整个django项目都校验csrf 但是某些个视图函数\类不想校验
整个django项目都不校验csrf 但是某些个视图函数\类需要校验

FBV添加装饰器的方式(与正常函数添加装饰器一致)
from django.views.decorators.csrf import csrf_exempt, csrf_protect
# @csrf_exempt
@csrf_protect
def transfer_func(request):pass

CBV添加装饰器的方式(与正常情况不一样 需要注意)
主要有三种方式
# @method_decorator(csrf_protect, name='post')  # 方式2:单独生效
class MyView(views.View):
    @method_decorator(csrf_protect)  # 方式3:整个类中生效
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

    # @method_decorator(csrf_protect)  # 方式1:单独生效
    def post(self, request):
        return HttpResponse('from cbv post view')
  
注意有一个装饰器是特例只能有一种添加方式>>>:csrf_exempt
 	只有在dispatch方法添加才会生效

auth认证模块

前戏:django自带一个admin路由 但是需要我们提供管理员账号和密码
如果想要使用admin后台管理 需要先创建表 然后创建管理员账号
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表
1.创建超级管理员
	python38 manage.py createsuperuser

基于auth_user表编写用户相关的各项功能
	登录、校验用户是否登录、修改密码、注销登录等

auth认证相关模块及操作

from django.contrib import auth
from django.contrib.auth.models import User
1.用户注册功能
    User.objects.create_user(username=username, password=password)
2.判断用户名和密码是否正确
	user_obj = auth.authenticate(request,
                       username=username,
                       password=password)  
3.判断用户是否登录
	request.user.is_authenticated
4.获取登录用户对象数据
	request.user
5.校验用户是否登录装饰器
	from django.contrib.auth.decorators import login_required
    @login_required(login_url='/login/')  局部配置 
    @login_required						全局配置
 	 配置文件中LOGIN_URL = '/login/'
6.校验原密码是否正确
	request.user.check_password(原密码)
7.修改密码
	request.user.set_password(新密码)
 	request.user.save()
8.退出登录
	auth.logout(request)

扩展auth_user表

还想使用auth模块的功能 并且又想扩展auth_user表的字段
思路1:一对一字段关联
思路2:替换auth_user表
	步骤1:模型层编写模型类继承AbstractUser
   		from django.contrib.auth.models import AbstractUser
       class UserInfo(AbstractUser):
        # 填写AbstractUser表中没有的字段
        phone = models.BigIntegerField()
        desc = models.TextField()
 	步骤2:一定要在配置文件中声明替换关系
        AUTH_USER_MODEL = 'app01.UserInfo'
	ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建)

标签:跨站,request,校验,auth,django,CBV,user,csrf
From: https://www.cnblogs.com/DragonY/p/17019880.html

相关文章

  • Django之csrf校验 CBV加装饰器以及auth认证模块
    目录Django之csrf校验CBV加装饰器以及auth认证模块一、csrf跨站请求伪造二、csrf校验策略(在提交数据的位置添加唯一标识)三、CBV加装饰器四、auth认证模块五、auth认证......
  • drf快速使用 CBV源码分析 drf之APIView分析 drf之Request对象分析
    目录序列化和反序列化drf介绍和安装使用原生django写接口djangoDRF安装drf快速使用模型序列化类视图路由datagrip使用postman测试接口CBV源码分析drf之APIView分析View类......
  • csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及
    今日内容csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户,但是其中有一些猫腻eg:英语四六级考试需要网......
  • csrf跨站请求伪造、csrf相关策略、CBV添加装饰器的多种方式
    csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式csrf跨站请求伪造钓鱼网站:模仿一个正规网站,让用户在该网站上进行操作,但操作的结果会影响到正常......
  • csrf跨站请求伪造
    目录csrf跨站请求伪造csrf相关校验策略csrf相关装饰器FBV添加装饰器的方式CBV添加装饰器的多种方式csrf跨站请求伪造1.csrf介绍CSRF(Cross-siterequestforgery,跨站请......
  • Egg(二)关闭csrf开启跨域
    1.安装插件npmiegg-cors--save2.开启插件配置路径:{app_root}/config/plugin.jscors:{enable:true,package:'egg-cors',},3.关闭csrf并开启跨域......
  • csrf与auth认证
    目录csrf与auth认证今日内容概要今日内容详细csrf跨站请求伪造csrf校验策略csrf相关装饰器auth认证模块csrf与auth认证今日内容概要csrf跨站请求伪造csrf校验策略csr......
  • django csrf跨站,CBV添加装饰器,auth认证模块
    djangocsrf跨站,CBV添加装饰器,auth认证模块内容概要csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式auth认证模块BBS项目需求分析内容详情csrf跨站请求......
  • csrf校验/CBV类添加装饰器
    csrf跨站请求伪造网站在提交表单时一般是通过post请求朝一个网站提交信息,然后这个网址通过request.POST的方式拿到数据。投机分子仿造了一个前端一摸一样的钓鱼网站,并且......
  • django 12 csrf跨站请求伪造
    今日内容详细目录今日内容详细csrf跨站请求伪造csrf校验策略csrf相关装饰器auth认证模块auth认证相关模块及操作扩展auth_user表csrf跨站请求伪造钓鱼网站:模仿一个正规......