最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django csrf 驗證問題的實現(xiàn)

 更新時間:2018年10月09日 09:08:45   作者:林帥  
csrf是通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。這篇文章主要介紹了Django csrf 驗證問題的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

關于 csrf 的基本了解

百度百科:CSRF(Cross-site request forgery)跨站請求偽造,通??s寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。

簡單來說就是攻擊者盜用你的身份,以你的名義來發(fā)送惡意請求。比如說用戶通過賬號密碼訪問了網(wǎng)站A,A網(wǎng)站將一些cookie信息保存在瀏覽器中實現(xiàn)用戶狀態(tài)行為跟蹤。這時用戶又打開了B網(wǎng)站,B網(wǎng)站返回了一些惡意代碼,并請求訪問A。這樣瀏覽器就會攜帶cookie以用戶的權限訪問A網(wǎng)站并執(zhí)行代碼。而在服務器看來,這些都是正常的用戶操作。

Django 提供的 CSRF 防護機制

django 第一次響應來自某個客戶端的請求時,會在服務器端隨機生成一個 token,把這個 token 放在 cookie 里。然后每次 POST 請求都會帶上這個 token,

這樣就能避免被 CSRF 攻擊。

1.在返回的 HTTP 響應的 cookie 里,django 會為你添加一個 csrftoken 字段,其值為一個自動生成的 token
2.在所有的 POST 表單時,必須包含一個 csrfmiddlewaretoken 字段 (只需要在模板里加一個 tag, django 就會自動幫你生成,見下面)
3.在處理 POST 請求之前,django 會驗證這個請求的 cookie 里的 csrftoken 字段的值和提交的表單里的 csrfmiddlewaretoken 字段的值是否一樣。如果一樣,則表明這是一個合法的請求,否則,這個請求可能是來自于別人的 csrf 攻擊,返回 403 Forbidden.
4.在所有 ajax POST 請求里,添加一個 X-CSRFTOKEN header,其值為 cookie 里的 csrftoken 的值

Django 里如何使用 CSRF 防護

  • 首先,最基本的原則是:GET 請求不要用有副作用。也就是說任何處理 GET 請求的代碼對資源的訪問都一定要是“只讀“的。
  • 要啟用 django.middleware.csrf.CsrfViewMiddleware 這個中間件
  • 再次,在所有的 POST 表單元素時,需要加上一個 {% csrf_token %} tag
  • 在渲染模塊時,使用 RequestContext。RequestContext 會處理 csrf_token 這個 tag,  從而自動為表單添加一個名為 csrfmiddlewaretoken 的 input

在Django 中對csrf 的防范

Django中自帶了防止csrf攻擊的功能,但對于初學者來說可能不知道如何使用,并給自己帶來些意外的麻煩。

例如:一個正常的表單提交操作卻總是報錯。

Django 中GET請求不需要csrf認證,post請求需要正確的認證才能得到正確的返回結果。

我們先處理一下對表單提交的 csrf 驗證問題:一般在POST表單中加入{% csrf_token %}

<form method="POST" action="#">
{% csrf_token %}
  <input name='password' value='用戶密碼'>
</form>

加入了這句話后,再次提交post表單就不會出現(xiàn)問題了。

或者是另一個思路:禁用csrf 

不過這樣可能帶來的危害你自己要想清楚了。

全局禁用:settings文件中找到關于csrf的中間件,直接注釋。

針對性禁用:在表單提交的對應視圖函數(shù)上加上一個裝飾器 @csrf_exempt

——————————————————————

{% csrf_token %} 實際上是一個模板語法,將項目的token值寫入到前端頁面的表單中,這個值在建立django項目時就已經(jīng)自動生成,可以在setting中看到。

——————————————————————–

下面再看一下Ajax調用時的處理方式

在使用 jquery 的 ajax 或者 post 之前可以加入一段 js 代碼

jQuery(document).ajaxSend(function(event, xhr, settings) {
  function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
      var cookies = document.cookie.split(';');
      for (var i = 0; i < cookies.length; i++) {
        var cookie = jQuery.trim(cookies[i]);
        // Does this cookie string begin with the name we want?
        if (cookie.substring(0, name.length + 1) == (name + '=')) {
          cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
          break;
        }
      }
    }
    return cookieValue;
  }
  function sameOrigin(url) {
    // url could be relative or scheme relative or absolute
    var host = document.location.host; // host + port
    var protocol = document.location.protocol;
    var sr_origin = '//' + host;
    var origin = protocol + sr_origin;
    // Allow absolute or scheme relative URLs to same origin
    return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
      (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
      // or any other URL that isn't scheme relative or absolute i.e relative.
      !(/^(\/\/|http:|https:).*/.test(url));
  }
  function safeMethod(method) {
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
  }

  if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
    xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
  }
});

或者是直接在模板文件中寫入

$.ajaxSetup({
  data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 使用Python和Tesseract實現(xiàn)驗證碼識別功能

    使用Python和Tesseract實現(xiàn)驗證碼識別功能

    驗證碼識別是一個常見且實用的技術需求,尤其是在自動化測試和數(shù)據(jù)采集場景中,通過開源 OCR工具 Tesseract,結合 Python 的強大生態(tài),我們可以高效實現(xiàn)驗證碼識別任務,本篇博客將以詳細步驟和代碼示例,介紹如何使用 Python 和 Tesseract 實現(xiàn)驗證碼識別
    2025-01-01
  • 從零學Python之入門(三)序列

    從零學Python之入門(三)序列

    今天比較清閑,多寫幾篇入門篇,本文是入門系列的第三篇,我們來學習下Python中的序列。
    2014-05-05
  • Python刪除列表中重復元素的七種方法舉例

    Python刪除列表中重復元素的七種方法舉例

    我們在面試中很可能遇到給定一個含有重復元素的列表,刪除其中重復的元素,下面這篇文章主要給大家介紹了關于Python刪除列表中重復元素的七種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Python操作json的方法實例分析

    Python操作json的方法實例分析

    這篇文章主要介紹了Python操作json的方法,結合實例形式簡單分析了Python針對json數(shù)據(jù)使用解碼loads()和編碼dumps()相關操作技巧,需要的朋友可以參考下
    2018-12-12
  • 舉例講解Python面向對象編程中類的繼承

    舉例講解Python面向對象編程中類的繼承

    類是面向對象語言中的標配,同樣類的繼承也是體現(xiàn)面向對象的重要特性,這里我們就來舉例講解Python面向對象編程中類的繼承,需要的朋友可以參考下
    2016-06-06
  • python原始套接字編程示例分享

    python原始套接字編程示例分享

    在實驗中需要自己構造單獨的HTTP數(shù)據(jù)報文,而使用SOCK_STREAM進行發(fā)送數(shù)據(jù)包,需要進行完整的TCP交互。因此想使用原始套接字進行編程,直接構造數(shù)據(jù)包,并在IP層進行發(fā)送,即采用SOCK_RAW進行數(shù)據(jù)發(fā)送。使用SOCK_RAW的優(yōu)勢是,可以對數(shù)據(jù)包進行完整的修改,可以處理IP層上的所有數(shù)據(jù)包,對各字段進行修改,而不受UDP和TCP的限制。
    2014-02-02
  • 深入詳解Python中sys模塊的功能與應用

    深入詳解Python中sys模塊的功能與應用

    在Python的標準庫中,sys模塊是一個常用而強大的工具,它提供了與Python解釋器交互的函數(shù)和變量,本文將介紹sys模塊的一些常用函數(shù)和方法,并通過實際的代碼實例來解析它們的用法,希望對大家有所幫助
    2024-03-03
  • Python應用實現(xiàn)處理excel數(shù)據(jù)過程解析

    Python應用實現(xiàn)處理excel數(shù)據(jù)過程解析

    這篇文章主要介紹了Python應用實現(xiàn)處理excel數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • python實現(xiàn)對csv文件的列的內容讀取

    python實現(xiàn)對csv文件的列的內容讀取

    今天小編就為大家分享一篇python實現(xiàn)對csv文件的列的內容讀取,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python網(wǎng)絡編程:socketserver的基本使用方法實例分析

    python網(wǎng)絡編程:socketserver的基本使用方法實例分析

    這篇文章主要介紹了python網(wǎng)絡編程:socketserver的基本使用方法,結合實例形式分析了python網(wǎng)絡編程中socketserver的基本功能、使用方法及操作注意事項,需要的朋友可以參考下
    2020-04-04

最新評論

济宁市| 双桥区| 玛曲县| 枣阳市| 通城县| 南平市| 屯昌县| 桦川县| 无为县| 朝阳县| 吴江市| 含山县| 泰安市| 宣恩县| 新野县| 威海市| 武汉市| 高安市| 南溪县| 自贡市| 舞钢市| 永泰县| 临汾市| 靖州| 宜川县| 镇巴县| 米易县| 资源县| 丹寨县| 巧家县| 青岛市| 博客| 凤凰县| 汉川市| 梧州市| 鄂尔多斯市| 抚顺市| 交口县| 宣武区| 蛟河市| 泾源县|