博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
64 装饰器函数: 母版 csrf防御机制 cookie
阅读量:4641 次
发布时间:2019-06-09

本文共 2546 字,大约阅读时间需要 8 分钟。

主要内容:

1: 装饰器函数

  a: 原理: 在不改变原函数的代码和调用方式的情况下, 给函数动态的添加功能

  b: 实例:

装饰器的原理:def yue(tools):    print('使用%s约一约' % tools)def wrapper(fn):    def inner(*args, **kwargs):        print('先准备好钱')        fn(*args, **kwargs)    return inneryue = wrapper(yue)yue('momo')  # 实际执行inner函数 , 给inner函数传参数, 要给inner函数设置形参, 即普遍协程万能参数的形式,

  装饰器函数形式

def wrapper(fn):    def inner(*args, **kwargs):        print('先准备好钱')        ret = fn(*args, **kwargs)   # 如果函数有返回值用ret接, 再返回.        return ret    return inner@wrapper  # 相当于执行yue = wrapper(yue)def yue(tools):    print('使用%s约一约' % tools)    return '准备好了'print(yue('momo'))

2 母版继承

  a : 作用: 可以减少代码量, 优化代码, 提高代码的复用性 类似于函数中的继承. (把相同的代码段提取出来, 不同的地方作为补充)

  b : {% extends '被继承的.html文件' %}

    {% block contenter %}{% endblock %}

  c : 实例

    母版文件

	    
Document
{% block page-main %} {% endblock %}

    继承母版文件的.html

{
% extends "被继承.html文件路径" %} {% block 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

你可能感兴趣的文章
Python记录_day21 模块
查看>>
ANR程序无响应原因及应对办法
查看>>
设计原则
查看>>
理解开发HD 钱包涉及的 BIP32、BIP44、BIP39
查看>>
ubuntu 14.10 共享文件夹
查看>>
NSInteger到底是什么数据类型
查看>>
jQuery/javascript 替换空格、回车、换行
查看>>
javascript语言基础知识
查看>>
十二条Linux运维面试必备经典笔试/面试题
查看>>
SocketAsyncEventArgs里的AcceptSocket能独立存在吗?
查看>>
c# 汉字换英文,英文转汉字
查看>>
HDU 4812 D Tree 树分治
查看>>
Odoo QWeb
查看>>
libjingle主线程的消息响应
查看>>
CSS之float样式
查看>>
08test
查看>>
测试用例方法总结
查看>>
基数---SQL Server 2008 Bible
查看>>
第一个JSP程序
查看>>
数组常用的API——splice()截取
查看>>