首页 > 其他分享 >csrf校验/CBV类添加装饰器

csrf校验/CBV类添加装饰器

时间:2022-12-27 21:45:00浏览次数:40  
标签:request 校验 添加 CBV csrf post 装饰

csrf跨站请求伪造

网站在提交表单时一般是通过post请求朝一个网站提交信息,然后这个网址通过request.POST的方式拿到数据。

投机分子仿造了一个前端一摸一样的钓鱼网站,并且表单提交的地址也是跟真实网址一个地址,那他就可以在提交数据前做一些非法手段。

例如提交数据前 更改数据的值等 篡改表单数据。

为了避免这种情况,我们应该保证我们网站只能接收我们网站自己发来的post请求,这里就用到了csrf校验

csrf校验

当我们收到post请求时,我们先查看是否是带有我们网站的csrf令牌,这样来确保接收的都是正确的数据,都是来自于本网站的数据。

如果post请求没有csrf标识,那我们就可以直接拒绝访问

如果添加csrf标示

form表单内部添加 {% csrf_token %}

{% csrf_token %}

ajax请求csrf策略

利用模板语法自动获取(一定要用引号引起来)
   {data:{'csrfmiddlewaretoken':'{{ csrf_token }}','username':'jason'}}
  
  方式2:直接引入一个js脚本即可(官网提供的)
 	参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html

csrf中间件

位置实际上就是我们之前经常注释掉的第四个中间件:

'django.middleware.csrf.CsrfViewMiddleware'

默认全局开启 所有的post请求都需要有csrf校验

它的逻辑是,当进来一个post请求(也有可能是除get外的其他请求)时,会对其进行csrfmiddlewaretoken的校验,如果有这么一个信息属性,那么比对这个信息是否有效,如果没有或者信息不对直接拒绝,这也就是前期在学习提交post表单请求时为什么会被403权限拦截的原因。

csrf校验装饰器

有时我们的csrf校验并不想全局设置,那么我们就可以给视图函数加装csrf装饰器让其取消或者添加csrf校验:

from django.views.decorators.csrf import csrf_exempt, csrf_protect
# 要导入这两个模块才可以生效

@csrf_exempt  
# 取消这个视图函数的csrf校验
def gogogo(request):pass

@csrf_protect 
# 单独添加csrf校验
def transfer(request):pass

# 这样就可以注销csrf校验的中间件 单独给个别函数设置校验

如何给CBV添加装饰器

基于FBV也就是视图函数我们是可以直接添加装饰器的,但是我们要是给视图类是不可以直接添加的 需要借助模块添加

类中某个功能添加

from django.utils.decorators import method_decorator  # 视图类加装饰器必须借助这个模块

class MyView(views.View):
    def get(request):pass
	
    @method_decorator(login_auth)  
    # 通过这个模块来装上装饰器('装饰器名字')
	  def post(request):pass    

给整个类添加装饰器

分发函数dispatch继承下来,因为执行视图类的所有函数都会经过这个dispatch,我们只需要在这个函数上加装装饰器就可以让每种请求都加装装饰器。

class MyView(views.View):
    @method_decorator(login_auth)  
    # 这个类的所有方法都加登录认证
    def dispatch(self, request, *args, **kwargs):
      # 直接给父类的dispatch方法添加装饰器,
      # 其实没有对这个父类方法做任何改变只是加了装饰器
        return super().dispatch(request, *args, **kwargs)
    
    def get(request):
         pass
	
	  def post(request):
         pass    

标签:request,校验,添加,CBV,csrf,post,装饰
From: https://www.cnblogs.com/moongodnnn/p/17009066.html

相关文章

  • django 12 csrf跨站请求伪造
    今日内容详细目录今日内容详细csrf跨站请求伪造csrf校验策略csrf相关装饰器auth认证模块auth认证相关模块及操作扩展auth_user表csrf跨站请求伪造钓鱼网站:模仿一个正规......
  • Java8中Optional类入门-替代null避免冗杂的非空校验
    场景Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127683387上面在讲Guava......
  • Java 自定义注解校验字段唯一性
    业务场景在项目中,某些情景下我们需要验证编码是否重复,账号是否重复,身份证号是否重复等...那么有没有办法可以解决这类似的重复代码量呢?我们可以通过自定义注解校验的方......
  • js校验输入0-1之间的小数,最多保留小数点后两位
    varreg=/^0\.[1-9]{0,2}$/;varlinka=0.1;console.log(reg.test(linka)); 0到1两位小数正则^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$不含0、0.0、0.00 /......
  • jquery.validate使用攻略(表单校验)
    jquery.validate使用攻略(表单校验) 目录jquery.validate使用攻略1第一章 jquery.validate使用攻略1第二章 jQuery.validate.jsAPI7Customselectors7Utilities......
  • csrf校验策略 csrf相关装饰器 auth认证模块 auth_user表扩展
    目录csrf跨站请求伪造csrf校验策略1.form表单csrf策略2.ajax请求csrf策略方式1:标签查找方式2:利用模板语法自动获取方式3:引入官网js脚本csrf相关装饰器FBV添加装饰器的方......
  • python之路56 csrf跨站请求 auth模块登录注册方法
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻eg:英语四六级考试需要网上先......
  • Djiango:csrf跨站请求伪造
    目录一、csrf跨站请求伪造1.csrf简介2.模拟钓鱼网站案例二、csrf相关校验策略1.form的csrf策略2.ajax请求csrf策略三、csrf相关视图验证1.FBV添加csrf校验装饰器2.CBV添加c......
  • cs跨站请求伪造 csrf添加装饰器的多种方式 auth认证模块 auth认证相关模块及操作 拓展
    目录csrf跨站请求伪造csrf相关校验策略1.form表单csrf策略2.ajax请求csrf策略方式一:方式二:方式三csrf添加装饰器的多种方式FBV中添加装饰器的方式CBV添加的方式方式一方式......
  • csrf
    csrf跨站请求伪造我们在网上缴费时通常会遇到一些钓鱼网站和真正的网站长得一模一样,我们在网站中进行金额操作钱被扣了可是我们需要的东西并没有得到,其实就是这个钓鱼网站......