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 ...
随机推荐
- Bootstrap‘s JavaScript requires jQuery
1.遇到的第一个问题:modal.js:6 Uncaught Error: Bootstrap's JavaScript requires jQuery at modal.js:6 2.遇到的第二个问 ...
- 2.pytest前后置(固件、夹具)处理
一.setup/teardown/setup_calss/teardown_class 为什么需要这些功能? 比如:我们执行用例之前,需要做的哪些操作,我们用例执行之后,需要做哪些操作 # 在所有用例 ...
- Dapr实现.Net Grpc服务之间的发布和订阅,并采用WebApi类似的事件订阅方式
大家好,我是失业在家,正在找工作的博主Jerry,找工作之余,总结和整理以前的项目经验,动手写了个洋葱架构(整洁架构)示例解决方案 OnionArch.其目的是为了更好的实现基于DDD(领域驱动分析) ...
- 六、dockerfile
一.什么是镜像 镜像可以看成是由多个镜像层叠加起来的一个文件系统(通过UnionFS与AUFS文件联合系统实现),镜像层也可以简单理解为一个基本的镜像,而每个镜像层之间通过指针的形式进行叠加. 根据上 ...
- 真正“搞”懂HTTP协议02之空间穿梭
时隔四年,这个系列鸽了四年,我终于觉得我可以按照自己的思路和想法把这个系列完整的表达出来了. 想起四年前,那时候还是2018年的六月份,那时候我还工作不到两年,那时候我翻译了RFC2616的部分内容, ...
- Oracle:ORA-39006、ORA-39213解决办法
执行Oracle数据库导入,遇到报错ORA-39006: internal error.ORA-39213: Metadata processing is not available.这还是第一次遇到 ...
- 要写文档了,emmm,先写个文档工具吧——DocMarkdown
前言 之前想用Markdown来写框架文档,找来找去发现还是Jekyll的多,但又感觉不是很合我的需求 于是打算自己简单弄一个展示Markdown文档的网站工具,要支持多版本.多语言.导航.页内导航等 ...
- 2022春每日一题:Day 24
题目:Work Group 树形dp,设状态f[u][0/1] 表示以u为根节点,他的子树中选了0(偶数)1(奇数)个节点的最大价值,设x为他的一个儿子,显然f[u][1]=max(f[k][0]+f ...
- 利用KubeEdge在A500部署边缘推理任务
利用KubeEdge在A500部署边缘推理任务 目 录 1 环境介绍... 1 2 云端环境部署... 2 2.1 在master节点安装Docker和k8S (ubuntu) 2 2.1.1 ...
- 【Java并发011】原理层面:CAS操作全解析
一.前言 volatile关键字是Java51个关键字中用的比较少的一个,它是一个与多线程并发的关键字,但是实际开发中,一般不会用到,使用synchronize+wait()+notify()/not ...