濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Python djanjo之csrf防跨站攻擊實(shí)驗(yàn)過程

Python djanjo之csrf防跨站攻擊實(shí)驗(yàn)過程

熱門標(biāo)簽:廣告地圖標(biāo)注app 唐山智能外呼系統(tǒng)一般多少錢 騰訊外呼線路 海南400電話如何申請(qǐng) 哈爾濱ai外呼系統(tǒng)定制 公司電話機(jī)器人 激戰(zhàn)2地圖標(biāo)注 陜西金融外呼系統(tǒng) 白銀外呼系統(tǒng)

一.CSRF簡(jiǎn)介

  1. CSRF是什么?
    CSRF(Cross-site request forgery),中文名稱:跨站請(qǐng)求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。
  2. CSRF可以做什么?
    你這可以這么理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請(qǐng)求。CSRF能夠做的事情包括:以你名義發(fā)送郵件,發(fā)消息,盜取你的賬號(hào),甚至于購(gòu)買商品,虛擬貨幣轉(zhuǎn)賬…造成的問題包括:個(gè)人隱私泄露以及財(cái)產(chǎn)安全。
  3. CSRF漏洞現(xiàn)狀?
    CSRF這種攻擊方式在2000年已經(jīng)被國(guó)外的安全人員提出,但在國(guó)內(nèi),直到06年才開始被關(guān)注,08年,國(guó)內(nèi)外的多個(gè)大型社區(qū)和交互網(wǎng)站分別爆出CSRF漏洞,如:NYTimes.com(紐約時(shí)報(bào))、Metafilter(一個(gè)大型的BLOG網(wǎng)站),YouTube和百度HI…而現(xiàn)在,互聯(lián)網(wǎng)上的許多站點(diǎn)仍對(duì)此毫無(wú)防備,以至于安全業(yè)界稱CSRF為“沉睡的巨人”。
    引用自:https://blog.csdn.net/qq_21956483/article/details/78116094

二.CSRF(Web表單提交)

web表單下設(shè)置CSRF標(biāo)簽可以有效防止CSRF跨站攻擊(如下圖)

{% csrf_token %}

如果不設(shè)置該表單,那么在訪問web頁(yè)面時(shí)會(huì)禁止訪問(如下圖)

應(yīng)對(duì)禁止訪問,其實(shí)也有很多辦法,其中一個(gè)辦法就是將配置文件(settings.py)中的csrf的中間件兒拿掉,這樣原來禁止訪問的頁(yè)面也可以成功訪問,但這種做法風(fēng)險(xiǎn)是非常大的,出于安全考慮,不推薦這樣做

另一種辦法是在視圖層加一個(gè)裝飾器(@csrf_exempt),實(shí)現(xiàn)局部不檢測(cè),換句話說,就是即使不在web表單中添加csrf標(biāo)簽,只要加了裝飾器,也能成功訪問頁(yè)面,需要注意的是僅限加了裝飾器的內(nèi)容,其他不加裝飾器的代碼還是禁止訪問的狀態(tài)

三.CSRF(Web表單提交)實(shí)驗(yàn)

接著我們就著上面說的內(nèi)容用代碼演示一遍:

首先,在app下的urls.py文件下配置一個(gè)子路由

from django.urls import path, re_path
from App import views

urlpatterns = [
    # csrf測(cè)試
    path('register/',views.register,name = 'register'),
]

接著,編寫視圖函數(shù)

def register(request):
    if request.method == "POST": # 如果該請(qǐng)求為POST請(qǐng)求
        username = request.POST.get('username') # 獲取表單中的username
        password = request.POST.get('password') # 獲取表單中的password
        print(username,password) # 打印username,password
    return render(request,'register.html') # 渲染模版,返回給web register.html中的內(nèi)容

web表單(未設(shè)置csrf標(biāo)簽)

!DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>注冊(cè)/title>
/head>
body>
form ation="" method="post">
    用戶名:input type="text" name="username">br>
    密碼:input type="text" name="password">br>
    input type="submit">
/form>
/body>
/html>

此時(shí)開啟服務(wù)(python manage.py runserver 8090)后,訪問web頁(yè)面,會(huì)顯示禁止訪問的字樣

那么接下來我們?cè)趙eb表單中設(shè)置csrf標(biāo)簽

{% csrf_token %}

!DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>注冊(cè)/title>
/head>
body>
form ation="" method="post">
    {# 防止跨站攻擊 #}
    {% csrf_token %}
    用戶名:input type="text" name="username">br>
    密碼:input type="text" name="password">br>
    input type="submit">
/form>
/body>
/html>

再來訪問web頁(yè)面,發(fā)現(xiàn)用戶名,密碼可以正常提交,且表單中會(huì)多一個(gè)csrf隱式偽隨機(jī)數(shù)

CSRF攻擊是源于WEB的隱式身份驗(yàn)證機(jī)制!WEB的身份驗(yàn)證機(jī)制雖然可以保證一個(gè)請(qǐng)求是來自于某個(gè)用戶的瀏覽器,但卻無(wú)法保證該請(qǐng)求是用戶批準(zhǔn)發(fā)送的!

CSRF防御機(jī)制思路是在客戶端頁(yè)面增加偽隨機(jī)數(shù)即可實(shí)現(xiàn)比較有效的跨站攻擊防御

四.CSRF(ajax提交)

ajax提交,需要在html中添加以下內(nèi)容

🌈1 引用jquery

🌈2 添加防止跨站攻擊標(biāo)簽

🌈3 添加ajax提交用button

🌈4 添加ajax

!DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>注冊(cè)/title>
    {# 🌈1 引用jquery #}
    script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js">/script>
/head>
body>
form ation="" method="post">
    {# 🌈2 防止跨站攻擊 #}
    {% csrf_token %}
    用戶名:input type="text" name="username">br>
    密碼:input type="text" name="password">br>
!--    {# 表單提交 #}-->
!--    input type="submit">-->

!--    {# 🌈3 ajax提交 #}-->
    input type="button" value="注冊(cè)" id="button">
/form>
/body>
/html>
script>
	{# 🌈4 ajax #}
    $("#button").click(function(){
        username = $("[name='username']").val();
        password = $("[name='password']").val();
        csrf = $("[type='hidden']").val();
        console.log(username,password,csrf);
        {# $.post("/register/") #}
    });

/script>

此處關(guān)于ajax傳參的方式只介紹了一種,如果還想了解的更深,請(qǐng)移步django之a(chǎn)jax傳參的兩種格式

訪問web頁(yè)面后,輸入用戶名,密碼,查看審查元素,控制臺(tái)會(huì)顯示輸入的用戶名,密碼,以及隱式偽隨機(jī)數(shù)

在html中繼續(xù)添加以下內(nèi)容

🌈5 post提交

!DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>注冊(cè)/title>
    {# 🌈1 引用jquery #}
    script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.12.4/jquery.min.js">/script>
/head>
body>
form ation="" method="post">
    {# 🌈2 防止跨站攻擊 #}
    {% csrf_token %}
    用戶名:input type="text" name="username">br>
    密碼:input type="text" name="password">br>
!--    {# 表單提交 #}-->
!--    input type="submit">-->

!--    {# 🌈3 ajax提交 #}-->
    input type="button" value="注冊(cè)" id="button">
/form>
/body>
/html>
script>
	{# 🌈4 ajax #}
    $("#button").click(function(){
        username = $("[name='username']").val();
        password = $("[name='password']").val();
        csrf = $("[type='hidden']").val();
        console.log(username,password,csrf);

        {# 🌈5 post提交 #}
        {# $.post("地址",{參數(shù)},function(返回值){}) #}
        $.post("/user/register/",{'username':username,'password':password,'csrfmiddlewaretoken':csrf},function(data){
            console.log(data)
        })

    });

/script>

視圖層添加以下代碼

🌟返回ajax請(qǐng)求

# 局部禁止
# @csrf_exempt
def register(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(username,password)

        # 🌟返回ajax請(qǐng)求
        return JsonResponse({'code':1})
        # {'code':1}為自定義值

    return render(request,'register.html')

最后訪問web頁(yè)面,ajax請(qǐng)求成功,且成功返回返回值{‘code':1}

總結(jié)

到此這篇關(guān)于Python djanjo之csrf防跨站攻擊的文章就介紹到這了,更多相關(guān)djanjo csrf防跨站攻擊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Django中如何防范CSRF跨站點(diǎn)請(qǐng)求偽造攻擊的實(shí)現(xiàn)

標(biāo)簽:惠州 上海 益陽(yáng) 鷹潭 黑龍江 常德 四川 黔西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python djanjo之csrf防跨站攻擊實(shí)驗(yàn)過程》,本文關(guān)鍵詞  Python,djanjo,之,csrf,防跨站,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python djanjo之csrf防跨站攻擊實(shí)驗(yàn)過程》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python djanjo之csrf防跨站攻擊實(shí)驗(yàn)過程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    绥化市| 中牟县| 锡林浩特市| 巴马| 和田县| 康平县| 马边| 苗栗市| 安新县| 连州市| 民县| 广河县| 将乐县| 永清县| 滨海县| 广汉市| 高碑店市| 永康市| 安顺市| 界首市| 高安市| 桐梓县| 和田县| 博客| 安泽县| 贵溪市| 西林县| 永德县| 台湾省| 阳城县| 乃东县| 沂源县| 扎囊县| 蒙城县| 华阴市| 孝感市| 唐山市| 山阳县| 永济市| 广灵县| 玉屏|