64 裝飾器函數: 母片 csrf防禦機制 cookie

來源:互聯網
上載者:User

標籤:發送post請求   csr   方式   srm   母片   現在   inf   log   不同的   

主要內容:

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 : 執行個體

    母片檔案

<!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.

 

    

 

 

 

  

64 裝飾器函數: 母片 csrf防禦機制 cookie

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.