首页 > 其他分享 >csrf跨网站请求操作 auth表相关操作

csrf跨网站请求操作 auth表相关操作

时间:2023-01-02 15:00:32浏览次数:42  
标签:request 校验 auth django user csrf 操作

今日内容详细

csrf跨站请求伪造

# 前戏
	钓鱼网站:模仿一个正规的网站 让用户再该网站上做操作但是操作结果会会影响用户正常的网站用户
'''
	在代码处做一些小操作就可以做到 
	思考:如何区分真假网站页面发送的请求
'''

csrf校验策略

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

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

csrf相关装饰器

# 两个极端情况
	整个django项目都校验csrf 但是某个视图函数\类不需校验
	整个django项目都不检验csrf 但是某些个视图函数\类需要校验
    
# 处理方式
	方式一: FBV添加装饰器的方式(与正常函数添加装饰器一致)
     from django.viwes.decorrators.csrf import csrf_exempt,csrf_protect
	'''被导入的就是语法糖exempt可以取消校验 protect就是校验'''
    @csrf_exempt
    def func(request):pass
    
    方式二: CBV添加装饰的方式(与正常情况不一样)
    @method_decorator(csrf_protect) #方式一:单独生效
    class MyView(views.View):
        @method_decorator(csrf_protect) # 方式二: 整个类生效
        def dispatch(self, request, *args, **kwargs):
            return super().dispatch(request, *args, **kwargs)
        @method_decorator(csrf_protect) # 方式三: 单独生效
        def post(self, request):
            return HttpResponse('from cbv post view')
'''注意针对csrf_exempt只能有一种添加方式 只有在dispatch生效'''

auth认证模块

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

auth认证相关模块及操作

from django.contrib import auth
from django.contrib.auth.models import User
# 用户注册
User.objects.create_user(username=username,password=password)

# 判断用户名和密码是否正确
user_obj = auth.authenticate(request,
                             username=username,
                             password=password)
'''使用authenticate来获取的是一个对象 参数需同时传入id和密码'''

# 判断用户是否登入
	request.user.is_authenticated
    
# 获取登入用户对象数据
	request.user

# 校验用户是否登入装饰器
	from django.contrib.auth.decorators import login_required
    '''局部配置'''
    @login_required(login_rel='/login/')
    '''全局配置'''
    @login_required
   	'''在配置文件中要将LOGIN_URL= "/login/" '''
    
# 校验原密码是否正确
	request.user.check_password(原密码)
    
# 修改密码
	request.user.set_password(新密码)
    request.user.save()
    '''保存修改的密码'''
    
# 退出登入
	auth.logout(request)

扩展auth_user表

'''因为所给的字段有限 想要拓展字段可以有两种思路'''
思路一:建立外键字段
    # 利用外键字段和auth_user表做关联 就等价于拓展了字段
思路二:替换掉auth_user表
    """步骤如下"""
    # 1.模型层新建立一张表 并且继承AbstractUser
    	from django.contrib.auth.models import AbstractUser
        class UserInfo(AbstractUser):
            '''在这里填写auth_user没有的字段'''
            phone = models.BigIntegrField()
	# 2.一定要在配置文件声明替换关系
    	AUTH_USER_MODEL = 'app01.UserInfo'
    # 注意
    	'''在使用替换表的时候要注意没有执行数据库迁移命令'''

标签:request,校验,auth,django,user,csrf,操作
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/17019914.html

相关文章

  • csrf跨站请求CBV添加装饰器的多种方式
    今日内容概要csrf跨站请求伪造csrf相关校验策略CBV添加装饰器的多种方式auth认证模块BBS项目需求分析今日内容详细csrf跨站请求伪造钓鱼网站:模仿一个正规的......
  • ArcEngine操作Z值和M值
    坐标信息中除了X,Y,ESRI还定义了Z值和M值。Z值是用来存储高程属性信息的,M值是用来存储其他属性信息的,如温度、浓度等。通常二维的矢量数据是不包含Z值,使用时应该格外注意,否则......
  • 执行 ssh-add 时显示错误 Could not open a connection to your authentication agent
    先执行eval`ssh-agent-s`再执行 ssh-add 那条命令即可  (诊断)为GitHub添加SSHkey时出现“Couldnotopenaconnectiontoyourauthenticationagent”错误......
  • Stata:变量名称 及相关操作
    变量名称基本规则:由英文字母、数字或者_组成;需以英文字母或者_作为开头,区分大小写。举例合理名称:a1,a_1,_a1注意事项:“_”一般不作为首字母(因许多内部变量由“_”加字......
  • Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    1.MemcachedMemcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、......
  • Docker操作逻辑及搭建web
    Docker操作逻辑当我们使用pull从docker仓库中将镜像下载到本地,也就是可以通过dockerimages查看到pull到的镜像,下载后,可以通过dockerrun将镜像启动运行在容器(Contaier)中......
  • Django之csrf校验 CBV加装饰器以及auth认证模块
    目录Django之csrf校验CBV加装饰器以及auth认证模块一、csrf跨站请求伪造二、csrf校验策略(在提交数据的位置添加唯一标识)三、CBV加装饰器四、auth认证模块五、auth认证......
  • 操作系统OS笔记目录(清华大学)
    简介不得不说想自学学操作系统,清华大学慕课是个不错的选择,但难度比较大,特别是想把慕课的实验部分内容也完成的话。不过如果能把它的实验部分也完成的话,相信你会对操作系统......
  • Python之路【第八篇】:堡垒机实例以及数据库操作
    1.堡垒机前戏开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 1.1SSHClient用于连接远程服务器并执行基本命令......
  • Java 操作 JSON 数据(6)--JSON-Java 操作 JSON 数据
    JSON-Java包是一个将Java对象和JSON文件相互转换的参考实现,演示了如何将JSON文档解析为Java对象,以及如何从Java对象生成JSON文档。本文介绍下 JSON-Java的基......