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.pswp.cn/news/451076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451076.shtml
英文地址,請注明出處:http://en.pswp.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&…