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 ...
随机推荐
- Vue学习之--------全局事件总线(2022/8/22)
文章目录 1.全局事件总线基础知识(GlobalEventBus) 2.图解过程 3.代码实例 3.1 main.js 3.1 App.vue 3.2 School.vue 3.3 Student.v ...
- 这次彻底读透 Redis
1. Redis 管道 我们通常使用 Redis 的方式是,发送命令,命令排队,Redis 执行,然后返回结果,这个过程称为Round trip time(简称RTT, 往返时间).但是如果有多条命令 ...
- VP记录
预计在最后的日子里适量VP 简单记录一下 CF 1037 Link 上来秒了ABCD,很快啊 A是二进制拆分,B是一眼贪心,C是一个非常简单且好写的dp D把边遍历顺序按照所需的bfs顺序排序,最后比 ...
- Oracle生成awr报告操作步骤介绍
AWR全称Automatic Workload Repository,自动负载信息库,是Oracle 10g版本后推出的一种性能收集和分析工具,提供了一个时间段内整个系统的报表数据.通过AWR报告,可 ...
- Python学习之实例3
一.文字读取并打印拼接字符串 1 with open('G:\python\char.txt') as f: #使用open()函数以只读模式打开文件 2 s=f.read() #使用read()方法 ...
- 【题解】UVA10228 A Star not a Tree?
题面传送门 解决思路 本题数据范围较小,可以使用模拟退火算法(随机化). 顾名思义,模拟退火就是一个类似于降温的过程.先设置一个较大的初温,每次随机改变状态,若使答案更优,则采取更优答案,否则根据其与 ...
- 嵌入式-C语言基础:字符串拼接函数strcat
#include<stdio.h> #include <string.h> //实现字符串拼接 char * mystrcat(char * dest,char * src) ...
- python基础(三)装饰器
字典推导式: data_list = ['1 hello','2 world'] result = {item.split(" ")[0]: item.split(" & ...
- jdk线程池ThreadPoolExecutor优雅停止原理解析(自己动手实现线程池)(二)
jdk线程池工作原理解析(二) 本篇博客是jdk线程池ThreadPoolExecutor工作原理解析系列博客的第二篇,在第一篇博客中从源码层面分析了ThreadPoolExecutor在RUNNIN ...
- Karmada跨集群优雅故障迁移特性解析
摘要:在 Karmada 最新版本 v1.3中,跨集群故障迁移特性支持优雅故障迁移,确保迁移过程足够平滑. 本文分享自华为云社区<Karmada跨集群优雅故障迁移特性解析>,作者:Karm ...