64 装饰器函数: 母版 csrf防御机制 cookie
主要内容:
1: 装饰器函数
a: 原理: 在不改变原函数的代码和调用方式的情况下, 给函数动态的添加功能
b: 实例:
装饰器的原理:
def yue(tools):print('使用%s约一约' % tools)
def wrapper(fn):def inner(*args, **kwargs):print('先准备好钱')fn(*args, **kwargs)return inner
yue = wrapper(yue)
yue('momo') # 实际执行inner函数 , 给inner函数传参数, 要给inner函数设置形参, 即普遍协程万能参数的形式,
装饰器函数形式
def wrapper(fn):def inner(*args, **kwargs):print('先准备好钱')ret = fn(*args, **kwargs) # 如果函数有返回值用ret接, 再返回.return retreturn inner
@wrapper # 相当于执行yue = wrapper(yue)
def yue(tools):print('使用%s约一约' % tools)return '准备好了'
print(yue('momo'))
2 母版继承
a : 作用: 可以减少代码量, 优化代码, 提高代码的复用性 类似于函数中的继承. (把相同的代码段提取出来, 不同的地方作为补充)
b : {% extends '被继承的.html文件' %}
{% block contenter %}{% endblock %}
c : 实例
母版文件
<!DOCTYPE html>
<html lang="en">
<head> <meta charset="UTF-8"> <title>Document</title>
</head>
<body> <!-- 需要母版进行替换的.html文件 --> {% block page-main %} {% endblock %}
</body>
</html>
继承母版文件的.html
<!-- 继承母版文件.html -->
{% extends "被继承.html文件路径" %}{% block page-main %} <!-- page-main 是要被替换的块名,可以更改 -->内容{% endblock %}
在 views.py 中配置
3 csrf: (Cross-site request forgery)跨网站请求伪造
详细介绍:https://www.cnblogs.com/freely/p/6928822.html
a : 原理如下图
从上图可以看出, 要完成一次的csrf攻击, 受害者必须完成两个步骤:
1. 登录受信任网站a, 并在本地生成cookie.
2. 在不退出a的情况, 访问危险网站b.
注意: 并不是退出a后再登录b就没事, 应为不能保证你关闭了浏览器后, 你本地的cookie就会过期, 你上次的会话已经结束
b : crsf 防御机制
1 可以从服务端和客户端两方面着手, 防御效果从服务端着手较好, 现在一般的csrf防御也在服务端进行.
2 Django下的csrf防御机制:Django第一次响应来自某个客户端的请求时, 会在服务端随机生成一个token, 把这个token放在cookie里, 然后每次post请求都会带上这个token这样就可以避免csrf攻击.
在 templete 中, 为每个 POST form 增加一个 {% csrf_token %} tag. 如下:
1在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token,在检查下的network中查看.
2在所有的 POST 表单模板中,加一个{% csrf_token %} 标签,它的功能其实是给form增加一个隐藏的input标签,如下
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">,而这个csrf_token = cookie.csrftoken,在渲染模板时context中有 context['csrf_token'] = request.COOKIES['csrftoken']
3在通过表单发送POST到服务器时,表单中包含了上面隐藏了crsrmiddlewaretoken这个input项,服务端收到后,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提交的表单里的 csrfmiddlewaretoken 字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden.
4在通过 ajax 发送POST请求到服务器时,要求增加一个x-csrftoken header,其值为 cookie 里的 csrftoken 的值,服务湍收到后,django会验证这个请求的cookie里的csrftoken字段与ajax post消息头中的x-csrftoken header是否相同,如果相同,则表明是一个合法的请求
4 cookie(储存在用户本地终端上的数据)
定义:在 Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理
目的: 为了让用户在访问某网站时,进一步提高访问速度,同时也为了进一步实现个人化网络,发明了今天广泛使用的 Cookiee.
转载于:https://www.cnblogs.com/gyh412724/p/9756384.html
64 装饰器函数: 母版 csrf防御机制 cookie相关推荐
- python装饰器函数-Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
- python装饰器函数-python函数装饰器
什么是装饰器 装饰器是一个可调用的对象,其参数是另一个函数(被装饰的函数).装饰器可能会: 1,处理被装饰的函数,然后把它返回 2,将其替换成另一个函数或者对象 若有个名为decorate的装饰器,则 ...
- python装饰器函数-【python3】 函数 装饰器
第一步 : 了解装饰器 装饰器模式,重点在于装饰,装饰的核心仍是被装饰的对象. 举一个栗子:我今天穿了一件短袖,但是突然一阵风,短袖没办法为我御寒,我想到的办法是将短袖变得更厚更长,但是改造之后,它就 ...
- python装饰器函数-python装饰器1:函数装饰器详解
先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了 ...
- python装饰器函数-python函数装饰器之带参数的函数和带参数的装饰器用法示例
本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...
- 装饰器 -- 函数装饰器(tornado异常响应装饰器)
装饰器 -- 函数装饰器(tornado异常响应装饰器) # 值可变,每次使用需要重新赋值 ERR_RESP_TEMPLATE = {"state": "FAILED&q ...
- Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...
Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...
- python带参数装饰器 函数名_python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)...
一.函数名应用 函数名是什么?函数名是函数的名字,本质:变量,特殊的变量. 函数名(),执行此函数. python 规范写法 1. #后面加一个空格,再写内容,就没有波浪线了. 2.一行代码写完,下面 ...
- python装饰器函数执行后日志_python 装饰器理解
在理解装饰器之前,先应该对闭包有个概念:所谓闭包,就是将组成函数的语句和这些语句的执行环境打包在一起时得到的对象,它的主要作用是封存上下文.这一特性可以巧妙的被用于现有函数的包装,从而为现有函数添加功 ...
最新文章
- opencv-python 使用掩模抠图
- create view必须是批处理中仅有的语句_sqlserver 脚本和批处理指令小结
- 冒泡排序--通过冒泡算法让数组中最大的值成为数组中最后一个值
- Android访问瓦片地图 费流量,瓦片地图注意事项
- mysql添加字段时定义候选键_MySQL 表约束
- 【LeetCode笔记】461. 汉明距离(Java、位运算)
- 学不动的前端人,该如何跟上前端技术的发展
- 阿里云服务器ECS挑选什么样的网站环境
- linux mysql 2003_如何解决linux mysql2003错误
- mysql自增字段重排 或 归零
- 信佑7 linux,信佑无盘、顺无盘通用型万能包,镜像包,linux无盘
- 2021 常用的 7 款 MySQL 客户端工具
- 苹果电脑桌面文件不见了怎么恢复
- 面对众多的选择,我选择什么
- 驯服烂代码_驯服业力,SauceLabs和Internet Explorer:揭秘之旅
- 与开发团队合作的8个技巧
- 三色球问题python_零基础入门学习Python习题3【输密码+水仙花数+摸三色球】
- QNAP 威联通 NAS的个人使用经验 篇二:QTS系统各功能讲解
- 李宏毅2020机器学习作业3-CNN:食物图片分类
- Linux系统架构概述
热门文章
- 【EOJ Monthly 2019.02 - D】进制转换(思维,取模,高精度大数)
- Apollo自动驾驶入门课程第③讲 — 定位
- 计算分数数组中去掉最低分的平均分,并打印
- linux忘记mysql登录用户密码_linux中忘记mysql用户root密码解决方案
- android nougat和安卓7.1,Android Nougat 7.1.2 先睹为快
- 聊一下CPU占用高的解决方案
- linux常用解压和压缩文件的命令
- 深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression
- c++基础学习(05)--(指针,引用)
- 《Python Cookbook 3rd》笔记(5.9):读取二进制数据到可变缓冲区中