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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook与Google的互联网霸主争夺战

摘要&#xff1a;谷歌的两位创始人对搜索情有独钟&#xff0c;而没有看到互联网发展的大势。虽然目前Facebook的估值最高为1000亿美元&#xff0c;与谷歌近2000亿美元的市值还相去甚远&#xff0c;但是未来很有可能超越谷歌&#xff0c;成为互联网新一代霸主。谷歌的两位创始人…

Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 方案一&#xff1a;用Eclipse自带的Export功能 步骤1&#xff1a;准备主清单文件 “MANIFEST.MF”&#xff0c; 由于是打包引用了第三…

Linux-MySQL基本命令-SQL语句

服务端命令SQL 在数据库系统中&#xff0c;SQL语句不区分大小写(建议用大写) SQL语句可单行或多行书写&#xff0c;以“;”结尾 关键词不能跨多行或简写 用空格和缩进来提高语句的可读性 子句通常位于独立行&#xff0c;便于编辑&#xff0c;提高可读性 注释&#x…

webAPI token验证

ASP.NET WebApi 实现Token验证 https://www.cnblogs.com/dukang1991/p/5627584.html转载于:https://www.cnblogs.com/KQNLL/p/9757025.html

评论:中国企业向Faceook学习什么

摘要&#xff1a;古人云&#xff1a;“迨天之未阴雨&#xff0c;彻彼桑土&#xff0c;绸缪牖户。且不论究竟谁会成为中国的Facebook&#xff0c;伴随着Facebook因上市带来的又一轮火热&#xff0c;不妨先来看看中国企业最需要向Facebook学习什么。古人云&#xff1a;“迨天之未…

java ++i、i++、i++ + ++i、i++ + i++原理

先上代码&#xff1a; public static void main(String args[]) {int A 1;int B 10;int C 100;int D 1000;System.out.println(A);System.out.println(B);System.out.println(C C);System.out.println(C);System.out.println(D D);System.out.println(D);} 在来运行结果…

一个判断session是否过期的小技巧

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Session一直是我们做web项目经常使用的&#xff0c;以前没太注意&#xff0c;这次又细致的看了下&#xff01; 1.session其实就是一个Ma…

扩展方法

扩展方法是写在静态类中&#xff0c;且方法是静态方法。 不限制参数的数量。 不限制返回类型。 不限制可使用扩展方法的类型。 和普通方法编写相似&#xff0c;唯一不同的是每一个扩展方法都必须有一个固定的参数。statc void Method&#xff08; this DataType name&#xff0…

cpu执行命令方式

(一)有序处理器 早期的处理器为有序处理器&#xff08;In-order processors&#xff09;&#xff0c;有序处理器处理指令通常有以下几步&#xff1a; 指令获取如果指令的输入操作对象&#xff08;input operands&#xff09;可用&#xff08;例如已经在寄存器中了&#xff09…

jQuery基础-事件

只能添加一个处理函数&#xff0c;后面的会覆盖前面 会有兼容性差异 冒泡 会依次检查父元素 截获冒泡 或者 最大的缺陷 并且在IE和NetSpace里面分别为冒泡和捕获两种 多个处理函数 依次执行 捕获--->自己--->冒泡 true 只捕获&#xff0c;不冒泡 false 只冒泡 从父元素的…

别的AI还在打游戏,这个AI已经当上“超级马里奥”游戏策划了|GECCO最佳论文

AI打游戏已经不是什么新鲜事了&#xff0c;“沉迷”Dota 2、星际争霸、LOL的AI一个接一个的出现。 但是你也许不知道&#xff0c;相比这些“游戏玩家”AI&#xff0c;还有一位优秀的AI&#xff0c;直接当起了“游戏策划”&#xff0c;做的还是脍炙人口的“超级马里奥”。 &…

单点登录的三种实现方式

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 单点登录SSO&#xff08;Single Sign On&#xff09;说得简单点就是在一个多系统共存的环境下&#xff0c;用户在一处登录后&#xff0c;…

快速判断数组中每个对象同一属性值是否相同

做批量查询的时候&#xff0c;要确定数组中的多个对象下的字符串是否能全部匹配&#xff0c;这时需要在匹配的名称对象中通过字段记录该名称是否匹配。 const search [ { name: B, isExistence: false },{ name: C, isExistence: false } ]; 这时要确定 search 是否全部匹配上…

java对象占用内存大小?

一个不包含任何内部成员变量的空Object大约占33byte&#xff0c;若增加成员变量&#xff0c;则增加相应大小的内存占用。 测算方式&#xff1a;设置jvm的堆大小为1m&#xff0c;在堆中不停new不含任何成员变量的OOMObject对象&#xff0c;直到堆内存溢出。如下图&#xff0c;在…

Java程序员面试中的多线程问题

很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework)&#xff0c;理解核心线程概念时&#xff0c;娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题&#xff0c;这些问题经常被高级工程师所问到。 0.Java 中多线程同步是什…

SpringBoot2使用WebFlux函数式编程

本文只是简单使用SpringBoot2使用WebFlux的函数式编程简单使用&#xff0c;后续会继续写关于Webflux相关的文章。 最近一直在研究WebFlux&#xff0c;后续会陆续出一些相关的文章。 首先看一下Srping官网上的一张图&#xff0c;对比一下SpringMvc和Spring WebFlux&#xff0c;如…

单点登录原理与简单实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构&#xff0c;http作为通信协议。http是无状态协议&#xff0c;浏…

java接口类支持多继承

一个类只能extends一个父类&#xff0c;只能有一个父类&#xff0c;但可以implements多个接口。java通过使用接口的概念来取代C中多继承。与此同时&#xff0c;一个接口则可以同时extends多个接口&#xff0c;却不能implements任何接口。Java中的接口是支持多继承的。

xmind-HTTP协议

转载于:https://www.cnblogs.com/margot921/p/9764788.html

弹性布局

弹性布局 一、Flex布局是什么&#xff1f; Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。 二、基本概念 采用Flex布局的元素&#xff0c;称为Flex容器&#xff08;flex container&…