今日内容

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表的更多相关文章

  1. 12月23日内容总结——csrf跨站请求伪造、校验策略、相关装饰器,auth认证模块及相关操作,拓展auth_user表

    目录 一.csrf跨站请求伪造 概念引入 概念讲解 二.csrf校验策略 概念讲解 form表单操作csrf策略 ajax请求csrf策略 三.csrf相关装饰器 四.auth认证模块 五.auth认 ...

  2. Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法

    Django框架 目录 Django框架 一.csrf跨站请求伪造 1.简介 2.csrf校验策略 form表单csrf策略 ajax请求csrf策略 3.csrf相关装饰器 FBV添加装饰器方式 C ...

  3. Django框架(十二)-- 中间件、CSRF跨站请求伪造

    中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...

  4. 什么是CSRF跨站请求伪造?(from表单效验csrf-ajdax效验csrf-Ajax设置csrf-CBV装饰器验证csrf)

    目录 一:csrf跨站请求伪造 1.什么是CSRF? 2.CSRF攻击案例(钓鱼网站) 3.钓鱼网站 内部原理 4.CSRF原理(钓鱼网站内部本质) 5.从上图可以看出,要完成一次CSRF攻击,受害者 ...

  5. SpringSecurity原理解析以及CSRF跨站请求伪造攻击

    SpringSecurity SpringSecurity是一个基于Spring开发的非常强大的权限验证框架,其核心功能包括: 认证 (用户登录) 授权 (此用户能够做哪些事情) 攻击防护 (防止伪造 ...

  6. Django中的CSRF(跨站请求伪造)

    Django中的CSRF(跨站请求伪造) Django CSRF  什么是CSFR 即跨站请求伪装,就是通常所说的钓鱼网站. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的? ...

  7. Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  8. Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)

    Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造)   摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...

  9. Django框架(十六)-- 中间件、CSRF跨站请求伪造

    一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view ...

随机推荐

  1. 齐博x1{:get_user_money(2,$uid)}

    第一項是積分類型,第二項是用戶的UID, 在模板中用得最多的可能是 {:get_user_money(2,$uid)} 以管理員身份登錄後,在前台任何頁麵,隻要添加了標簽,雙擊就可以進入設置管理,如果 ...

  2. 【MySQL】03_数据类型

    MySQL 中的数据类型 类型 类型举例 整数类型 TINYINT.SMALLINT.MEDIUMINT.INT(或INTEGER).BIGINT 浮点类型 FLOAT.DOUBLE 定点数类型 DE ...

  3. SpringBoot 解决跨域问题代码

    package com.example.demo.gs; import org.springframework.context.annotation.Configuration; import jav ...

  4. 京东云开发者|mysql基于binlake同步ES积压解决方案

    1 背景与目标 1.1 背景 国际财务泰国每月月初账单任务生成,或者重算账单数据,数据同步方案为mysql通过binlake同步ES数据,在同步过程中发现计费事件表,计费结果表均有延迟,ES数据与My ...

  5. Pthread 并发编程(二)——自底向上深入理解线程

    Pthread 并发编程(二)--自底向上深入理解线程 前言 在本篇文章当中主要给大家介绍线程最基本的组成元素,以及在 pthread 当中给我们提供的一些线程的基本机制,因为很多语言的线程机制就是建 ...

  6. Jenkinsfile Pipeline 使用 SSH 连接

    前提 首先你需要将用到的 SSH 私钥保存到 Jenkins 的凭据中,这样你会获得一个 credentialId.这不是本文主要的内容,故不在此展开赘述,详情可参考官方文档:https://www. ...

  7. 如何精简 Prometheus 的指标和存储占用

    前言 随着 Prometheus 监控的组件.数量.指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多. 在这种情况下,要优化 Prometheus 性能, 优化存储 ...

  8. oracle 中模糊查询对like的代替insrt()函数 可以做到效率节约一倍以上

    昨天在处理一个字符拆分的功能时,用用到了insrt()函数,偶然发现其实特可以代替模糊查询的like,经多次测试可节约效率一倍以上. 代码如下: select distinct(a.deptname) ...

  9. Forest + IDEA = 双倍快乐!ForestX 隆重登场

    Forest + IDEA = 双倍快乐!ForestX 隆重登场 Forest 是一款声明式的 Java 开源 HTTP 框架,相比它的前辈 Httpclient 和 OkHttp 更简明易懂.也更 ...

  10. 谈谈我的「数字文具盒」 - NextCloud

    接下来两篇主要谈论 Nextcloud 和 Obsidian,因为篇幅较长,所以单出罗列出来.本文主要介绍 Nextcloud 以及使用中的技巧和心得体会. Nextcloud Nextcloud 是 ...