欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

關(guān)于 csrf 的基本了解

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

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

Django 提供的 CSRF 防護(hù)機(jī)制

django 第一次響應(yīng)來自某個(gè)客戶端的請(qǐng)求時(shí),會(huì)在服務(wù)器端隨機(jī)生成一個(gè) token,把這個(gè) token 放在 cookie 里。然后每次 POST 請(qǐng)求都會(huì)帶上這個(gè) token,

這樣就能避免被 CSRF 攻擊。

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

Django 里如何使用 CSRF 防護(hù)

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

在Django 中對(duì)csrf 的防范

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

例如:一個(gè)正常的表單提交操作卻總是報(bào)錯(cuò)。

Django 中GET請(qǐng)求不需要csrf認(rèn)證,post請(qǐng)求需要正確的認(rèn)證才能得到正確的返回結(jié)果。

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

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

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

或者是另一個(gè)思路:禁用csrf 

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

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

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

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

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

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

下面再看一下Ajax調(diào)用時(shí)的處理方式

在使用 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 }}' },
});

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)xlwt xlrd 指定條件給excel行添加顏色

    python實(shí)現(xiàn)xlwt xlrd 指定條件給excel行添加顏色

    這篇文章主要介紹了python實(shí)現(xiàn)xlwt xlrd 指定條件給excel行添加顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 用 Python 寫的文檔批量翻譯工具效果竟然超出想象

    用 Python 寫的文檔批量翻譯工具效果竟然超出想象

    這篇文章主要介紹了用 Python 寫的文檔批量翻譯工具,效果竟然超越付費(fèi)軟件,這個(gè)非常適合python辦公自動(dòng)化腳本,非常不錯(cuò),實(shí)現(xiàn)方法也很簡(jiǎn)單,需要的朋友可以參考下
    2021-05-05
  • pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法

    pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法

    今天小編就為大家分享一篇pytorch 轉(zhuǎn)換矩陣的維數(shù)位置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python防止程序超時(shí)的實(shí)現(xiàn)示例

    python防止程序超時(shí)的實(shí)現(xiàn)示例

    因?yàn)槟硞€(gè)需求,需要在程序運(yùn)行的時(shí)候防止超時(shí),本文主要介紹了python防止程序超時(shí)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • python遍歷文件目錄、批量處理同類文件

    python遍歷文件目錄、批量處理同類文件

    這篇文章主要為大家詳細(xì)介紹了python遍歷文件目錄、批量處理同類文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 對(duì)pandas的行列名更改與數(shù)據(jù)選擇詳解

    對(duì)pandas的行列名更改與數(shù)據(jù)選擇詳解

    今天小編就為大家分享一篇對(duì)pandas的行列名更改與數(shù)據(jù)選擇詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python實(shí)現(xiàn)更改圖片尺寸大小的方法(基于Pillow包)

    Python實(shí)現(xiàn)更改圖片尺寸大小的方法(基于Pillow包)

    這篇文章主要介紹了Python實(shí)現(xiàn)更改圖片尺寸大小的方法,結(jié)合實(shí)例形式分析了Python基于Pillow包更改圖片屬性的相關(guān)技巧,需要的朋友可以參考下
    2016-09-09
  • Python中的異常處理講解

    Python中的異常處理講解

    這篇文章介紹了Python中的異常處理,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 一文詳解Python中的subprocess模塊

    一文詳解Python中的subprocess模塊

    subprocess模塊是Python標(biāo)準(zhǔn)庫的一部分,提供了一個(gè)跨平臺(tái)的方法來生成新進(jìn)程、連接其輸入/輸出/錯(cuò)誤管道,并獲取其返回碼,本文小編將和大家一起深入理解Python中的subprocess模塊,感興趣的小伙伴跟著小編一起來看看吧
    2024-08-08
  • python3 打印輸出字典中特定的某個(gè)key的方法示例

    python3 打印輸出字典中特定的某個(gè)key的方法示例

    這篇文章主要介紹了python3 打印輸出字典中特定的某個(gè)key的方法,涉及Python字典的遍歷、判斷、輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07

最新評(píng)論