csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及操作、扩展auth_user表
今日内容
csrf跨站请求伪造
钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的结果会影响到用户正常的网站账户,但是其中有一些猫腻
eg:英语四六级考试需要网上先缴费,但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户,并不是真正的四六级官方账户
模拟钓鱼网站转账案例
真网站:
<h1>真网站</h1>
<form action="" method="post">
<p>用户名:
<input type="text" name="username">
</p>
<p>转账人姓名
<input type="text" name="target_name">
</p>
<p>转账金额
<input type="text" name="money">
</p>
<input type="submit">
</form>
假网站:内部隐藏标签
<form action="http://127.0.0.1:8000/transfer/" method="post">
<p>用户名:
<input type="text" name="username">
</p>
<p>转账人姓名
<input type="text" >
<input type="text" name="target_name" value="日日" style="display: none">
</p>
<p>转账金额
<input type="text" name="money">
</p>
<input type="submit">
</form>
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相关装饰器
from django.views.decorators.csrf import csrf_exempt,csrf_protect #导入模块
csrf_exemp #整个django项目都校验csrf 某个视图函数/类不需要进行csrf校验
csrf_protect #整个django项目都不校验csrf 某个视图类函数/类需要进行csrf校验
FBV:
#FBV使用直接加就行 与正常函数一直
@csrf_exempt
def index(request):
pass
"""把csrf_exempt装饰器直接加到index函数中,使该函数不需要经过csrf验证(配置文件开启csrf验证)
CBV:
方式1:单独生效
from django.utils.decorators import method_decorator #导入模块
class MyView(views.View):
@method_decorator(csrf_protect)
def post(self,request):
return HttpResponse('from cbv post view')
'''在函数上面添加装饰器 在括号里面填写装饰器的名字 '''
方式2:单独生效
@method_decorator(csrf_protect,name='post')
class MyView(views.View):
def post(self,request):
return HttpResponse('from cbv post view')
'''在类的上面添加装饰器 括号里写装饰器的名字 和 想要添加装饰器的函数名'''
方式3:全局有效
class MyView(views.View):
@method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request,*args,**kwargs)
def post(self,request):
return HttpResponse('from cbv post view')
'''在dispatch方法上面加 修改全局'''
注意:装饰器>>>:csrf_exempt特殊
只有在dispatch方法上添加 才生效
auth认证模块
前戏:django自带一个admin路由 但是需要我们提供管理员账号和密码
如果想要使用admin后台管理 需要先创建表 然后创建管理员账号
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表
创建超级管理员
createsuperuser
auth认证相关模块及操作
用户注册:
from django.contrib.auth.models import User
def register_func(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 校验用户名是否已存在
res = User.objects.filter(username=username)
if res:
return HttpResponse('用户名已存在')
# 注册该用户(不能自己创建 因为密码加密无法实现)
User.objects.create_user(username=username, password=password)
return render(request, 'register.html')
'''
注意:创建用户的时候不要再用create方法 用create_user 可以将密码加密
'''
用户登录:
def login_func(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
#校验用户名和密码是否正确(自己无法比对密码 返回一个用户对象
res=auth.authenticate(request,username=username,password=password)
if res :
#用户登陆成功 返回一个凭证
auth.login(request,res) #自动操作
return HttpResponse('登陆成功')
return render(request,'login.html')
'''
获取到用户名和密码之后要进行比对
自己无法比对密码 用到auth模块 返回的是一个用户对象
保存session 用auth模块可以自动操作django_session表
'''
判断用户是否登录:
request.user.is_authenticated
获取登录用户对象数据:
request.uesr
校验用户是否登录装饰器:
from django.contrib.auth.decorators import login_required
@login_required(login_url = '/login/') 局部配置
配置文件 LOGIN_URL = '/login/' 全局配置
校验原密码是否正确:
request.user.check_password(原密码)
修改密码:
request.user.set_password(新密码)
request.user.save()
退出登录:
auth.logout(request)
自动操作session
扩展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相关表没有创建
csrf跨站请求伪造、csrf校验策略、csrf相关装饰器、auth认证模块、auth认证相关模块及操作、扩展auth_user表的更多相关文章
- 12月23日内容总结——csrf跨站请求伪造、校验策略、相关装饰器,auth认证模块及相关操作,拓展auth_user表
目录 一.csrf跨站请求伪造 概念引入 概念讲解 二.csrf校验策略 概念讲解 form表单操作csrf策略 ajax请求csrf策略 三.csrf相关装饰器 四.auth认证模块 五.auth认 ...
- Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法
Django框架 目录 Django框架 一.csrf跨站请求伪造 1.简介 2.csrf校验策略 form表单csrf策略 ajax请求csrf策略 3.csrf相关装饰器 FBV添加装饰器方式 C ...
- Django框架(十二)-- 中间件、CSRF跨站请求伪造
中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...
- 什么是CSRF跨站请求伪造?(from表单效验csrf-ajdax效验csrf-Ajax设置csrf-CBV装饰器验证csrf)
目录 一:csrf跨站请求伪造 1.什么是CSRF? 2.CSRF攻击案例(钓鱼网站) 3.钓鱼网站 内部原理 4.CSRF原理(钓鱼网站内部本质) 5.从上图可以看出,要完成一次CSRF攻击,受害者 ...
- SpringSecurity原理解析以及CSRF跨站请求伪造攻击
SpringSecurity SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核心功能包括: 认证 (用户登录) 授权 (此用户能够做哪些事情) 攻击防护 (防止伪造 ...
- Django中的CSRF(跨站请求伪造)
Django中的CSRF(跨站请求伪造) Django CSRF 什么是CSFR 即跨站请求伪装,就是通常所说的钓鱼网站. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的? ...
- Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)
摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...
- Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)
Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造) 摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...
- Django框架(十六)-- 中间件、CSRF跨站请求伪造
一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view ...
随机推荐
- java中的栈(利用数组实现栈)
java中的栈(利用数组实现栈) 常见的数据结构:https://blog.csdn.net/weixin_43304253/article/details/119764275 栈的介绍 1.栈的英文 ...
- 基于Seq2Seq和注意力机制的句子翻译
Seq2Seq(Attention) 目录 Seq2Seq(Attention) 1.理论 1.1 机器翻译 1.1.1 模型输出结果处理 1.1.2 BLEU得分 1.2 注意力模型 1.2.1 A ...
- <五>掌握左值引用和初识右值引用
1:C++的引用,引用和指针的区别? 1:从汇编指令角度上看,引用和指针没有区别,引用也是通过地址指针的方式访问指向的内存 int &b=a ; 是需要将a的内存地址取出并存下来, b=20; ...
- 如何在Spring Boot开启事务
说到事务,那什么是事务呢? 事务(Transaction),一般是指要做的或所做的事情. 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行. ...
- go:快速添加接口方法及其实现
问题描述 在大型项目中,通常存在多个模块,模块对外暴露的功能通常是通过接口封装,这样可以明确模块的功能,有效降低模块与模块之间的耦合度,同时模块与模块之间进行合理的组装.接口的实现,有时可能存在多个实 ...
- 【操作说明】全能型H.265播放器如何使用?
本播放器集成了公司业务的接口,包含了实播,回放,云台控制和回放速度控制,截图和全屏功能可以根据type直接初始化接口地址如果是第三方业务对接,也可以单独配置接口地址 正确使用H.265播放器需要按以下 ...
- Java安全之CC6
前言 之前三篇详细分析了CommonsCollections1利用链,两种方法,LazyMap以及TransformedMap,但是在Javaa 8u71以后,这个利⽤链不能再利⽤了,主要原因是 su ...
- C#使用附加到进程调试
微软官网的调试进程介绍 首先运行bin下的可执行文件,然后打开源代码,选择调试--->附加到进程.
- 大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-上
@ 目录 概述 定义 发展历史 特性 使用场景 编译安装 编译环境 编译Hudi 关键概念 TimeLine(时间轴) File Layouts(文件布局) 索引 表类型 查询类型 概述 定义 Apa ...
- xshell取消置顶
现象:xshell置顶,导致无法正常浏览其他应用,文件等 原因分析:打开xshell时,触发其置顶快捷方式:Alt+A 解决建议:针对此问题,首先,可以从"查看栏"手动取消置顶:其 ...