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

Django CSRF跨站請求偽造防護(hù)過程解析

 更新時(shí)間:2019年07月31日 09:13:50   作者:Tanglaoer  
這篇文章主要介紹了Django CSRF跨站請求偽造防護(hù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

前言

CSRF全稱Cross-site request forgery(跨站請求偽造),是一種網(wǎng)絡(luò)的攻擊方式,也被稱為“One Click Attack”或者Session Riding,通??s寫為CSRF或者XSRF。

攻擊原理

1、用戶訪問正常的網(wǎng)站A,瀏覽器就會保存網(wǎng)站A的cookies。

2、用戶在訪問惡意網(wǎng)站B, 網(wǎng)站B上有某個(gè)隱藏的鏈接會自動(dòng)請求網(wǎng)站A的鏈接地址,例如表單提交,傳指定的參數(shù)。

3、惡意網(wǎng)站B的自動(dòng)化請求,執(zhí)行就是在用戶A的同一個(gè)瀏覽器上,因此在訪問網(wǎng)站A的時(shí)候,瀏覽器會自動(dòng)帶上網(wǎng)站A的cookies。

4、所以網(wǎng)站A在接收到請求之后,可判斷當(dāng)前用戶登錄狀態(tài),所以根據(jù)用戶的權(quán)限做具體的操作邏輯。

防范措施

1、在指定表單或者請求頭的里面添加一個(gè)隨機(jī)值做為參數(shù)。

2、在響應(yīng)的cookie里面也設(shè)置該隨機(jī)值。

3、用戶正常提交表單的時(shí)候會默認(rèn)帶上表單中的隨機(jī)值,瀏覽器會自動(dòng)帶上cookie里面的隨機(jī)值,那么服務(wù)器下次接受到請求之后就可以取出兩個(gè)值進(jìn)行校驗(yàn)。

4、對于網(wǎng)站B來說網(wǎng)站B在提交表單的時(shí)候不知道該隨機(jī)值是什么,所以就形成不了攻擊。

Django中CSRF中間件

django在創(chuàng)建項(xiàng)目的時(shí)候,默認(rèn)就會有添加中間進(jìn)行CSRF的保護(hù),在MIDDLEWARE可以看到加載了 django.middleware.csrf.CsrfViewMiddleware 的中間件,這里是全局設(shè)置,也可以局部設(shè)置。

全局保護(hù):直接啟用中間件就可以了。

局部保護(hù): from django.views.decorators.csrf import csrf_exempt,csrf_protect ,使用裝飾器進(jìn)行驗(yàn)證。

csrf_protect :為當(dāng)前函數(shù)強(qiáng)制設(shè)置防跨站請求偽造功能,即便settings中沒有設(shè)置全局中間件;

csrf_exempt :取消當(dāng)前函數(shù)防跨站請求偽造功能,即便settings中設(shè)置了全局中間件。

驗(yàn)證

在POST請求提交數(shù)據(jù)的時(shí)候,django會去檢查是否有一個(gè)csrf的隨機(jī)字符串,如果沒有就會返回403沒有權(quán)限訪問。

表單驗(yàn)證

在form表單里面需要添加{%csrf_token%},Django會自動(dòng)渲染隱藏的input輸入框:

<input type="hidden" name="csrfmiddlewaretoken" value="2Sb0DQwDVgOQ8i3n1BaG1MUPLEYr6ZGaCLYa14maOQM0Ami5ddQOR6hfXuD2mrmA">

在表單提交的時(shí)候,中間件會驗(yàn)證csrfmiddlewaretoken。

通過ajax提交

通過cookies獲取到csrftoken,

function getCookie(name) {
  var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
  return r ? r[1] : undefined;
}
$.ajax({
  url:"/api/v1.0/orders",
  type:"POST",
  data: JSON.stringify(data),
  contentType: "application/json",
  dataType: "json",
  headers:{
    "X-CSRFtoken":getCookie("csrf_token"),
  },

局部禁用或者啟用

1、如果是函數(shù)視圖,可以直接在函數(shù)加上裝飾器即可:

from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt
def login(request):
  if request.method == 'GET':
    return render(request,'login.html')
  else:
    return HttpResponse('ok')

2、如果是類視圖,需要使用方法裝飾器進(jìn)行封裝

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.views.generic import TemplateView

@method_decorator(csrf_exempt)
class LoginView(TemplateView):
  template_name = 'login.html'
  def post():
    return HttpResponse('ok')

3、直接裝飾as_view()方式,在URLconf里面設(shè)置。

from django.views.decorators.csrf import csrf_exempt,csrf_protect
urlpatterns = [
  path('login/', csrf_exempt(LoginView.as_view()),name="login"),
]

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

相關(guān)文章

  • Dephi逆向工具Dede導(dǎo)出函數(shù)名MAP導(dǎo)入到IDA中的實(shí)現(xiàn)方法

    Dephi逆向工具Dede導(dǎo)出函數(shù)名MAP導(dǎo)入到IDA中的實(shí)現(xiàn)方法

    這篇文章主要介紹了Dephi逆向工具Dede導(dǎo)出函數(shù)名MAP導(dǎo)入到IDA中,通過這個(gè)腳本,我們就可以把專業(yè)dephi程序分析的結(jié)果,轉(zhuǎn)移到IDA專業(yè)逆向代碼分析的平臺,實(shí)現(xiàn)聯(lián)動(dòng),需要的朋友可以參考下
    2022-08-08
  • Python實(shí)現(xiàn)輕松讀取大文件的技巧揭秘

    Python實(shí)現(xiàn)輕松讀取大文件的技巧揭秘

    Python提供了多種方法來讀取文件內(nèi)容,其中包括read()、readline()和readlines()三個(gè)常用的函數(shù),本文將深入探討這三個(gè)函數(shù)的使用方法,需要的可以參考一下
    2023-08-08
  • 淺談對yield的初步理解

    淺談對yield的初步理解

    下面小編就為大家?guī)硪黄獪\談對yield的初步理解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • python可以用哪些數(shù)據(jù)庫

    python可以用哪些數(shù)據(jù)庫

    在本篇文章里小編給大家整理的是關(guān)于python支持哪些數(shù)據(jù)庫的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python字符串與正則表達(dá)式詳細(xì)介紹

    Python字符串與正則表達(dá)式詳細(xì)介紹

    這篇文章主要介紹了Python字符串與正則表達(dá)式,Python字符串與正則表達(dá)式在Python中具有非常重要的地位,熟練的使用字符串與正則表達(dá)式能夠?yàn)槲覀兊腜ython編程提供很多的便利之處,希望您閱讀完本文后能夠有所收獲
    2022-01-01
  • opencv?canny邊緣檢測算法詳解

    opencv?canny邊緣檢測算法詳解

    本文主要介紹了opencv?canny邊緣檢測算法詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • windows及l(fā)inux環(huán)境下永久修改pip鏡像源的方法

    windows及l(fā)inux環(huán)境下永久修改pip鏡像源的方法

    不知道有沒有人跟我一樣,在剛接觸Linux時(shí)被系統(tǒng)更新源問題搞得暈頭轉(zhuǎn)向,不同的Linux更新源配置也是不一樣的,另外由于默認(rèn)安裝時(shí)的源大都是外國的更新源,速度相對國內(nèi)會慢很多,接下來本文主要介紹在windows和linux兩種系統(tǒng)環(huán)境中更新系統(tǒng)源的方法。
    2016-11-11
  • PyCharm 2021.2 (Professional)調(diào)試遠(yuǎn)程服務(wù)器程序的操作技巧

    PyCharm 2021.2 (Professional)調(diào)試遠(yuǎn)程服務(wù)器程序的操作技巧

    本文給大家分享用 PyCharm 2021 調(diào)試遠(yuǎn)程服務(wù)器程序的過程,通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • 使用Python的web.py框架實(shí)現(xiàn)類似Django的ORM查詢的教程

    使用Python的web.py框架實(shí)現(xiàn)類似Django的ORM查詢的教程

    這篇文章主要介紹了使用Python的web.py框架實(shí)現(xiàn)類似Django的ORM查詢的教程,集成的ORM操作數(shù)據(jù)庫向來是Python最強(qiáng)大的功能之一,本文則探討如何在web.py框架上實(shí)現(xiàn),需要的朋友可以參考下
    2015-05-05
  • python使用SMTP發(fā)送qq或sina郵件

    python使用SMTP發(fā)送qq或sina郵件

    這篇文章主要為大家詳細(xì)介紹了python使用SMTP發(fā)送qq或sina郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論