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

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

 更新時(shí)間:2021年05月14日 14:43:32   作者:金小金~  
csrf攻擊,即cross site request forgery跨站(域名)請(qǐng)求偽造,這里的forgery就是偽造的意思。這篇文章主要給大家介紹了關(guān)于Python djanjo之csrf防跨站攻擊的相關(guān)資料,需要的朋友可以參考下

一.CSRF簡(jiǎn)介

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

二.CSRF(Web表單提交)

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

{% csrf_token %}

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

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

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

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

接著我們就著上面說(shuō)的內(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'),
]

接著,編寫(xiě)視圖函數(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">
    用戶(hù)名:<input type="text" name="username"><br>
    密碼:<input type="text" name="password"><br>
    <input type="submit">
</form>
</body>
</html>

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

那么接下來(lái)我們?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 %}
    用戶(hù)名:<input type="text" name="username"><br>
    密碼:<input type="text" name="password"><br>
    <input type="submit">
</form>
</body>
</html>

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

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

CSRF防御機(jī)制思路是在客戶(hù)端頁(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 %}
    用戶(hù)名:<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傳參的兩種格式

訪(fǎng)問(wèn)web頁(yè)面后,輸入用戶(hù)名,密碼,查看審查元素,控制臺(tái)會(huì)顯示輸入的用戶(hù)名,密碼,以及隱式偽隨機(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 %}
    用戶(hù)名:<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')

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

總結(jié)

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

相關(guān)文章

  • Python搭建Keras CNN模型破解網(wǎng)站驗(yàn)證碼的實(shí)現(xiàn)

    Python搭建Keras CNN模型破解網(wǎng)站驗(yàn)證碼的實(shí)現(xiàn)

    這篇文章主要介紹了Python搭建Keras CNN模型破解網(wǎng)站驗(yàn)證碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • OpenManus安裝教程

    OpenManus安裝教程

    OpenManus是一個(gè)開(kāi)源AIAgent平臺(tái),通過(guò)復(fù)刻Manus項(xiàng)目實(shí)現(xiàn),OpenManus不僅復(fù)刻了Manus的核心功能,還具備模塊化Agent系統(tǒng),開(kāi)發(fā)者可以根據(jù)需求自由組合不同的功能模塊,創(chuàng)造出符合自己需求的AI助手?,本文介紹OpenManus安裝教程,感興趣的朋友一起看看吧
    2025-03-03
  • flask框架單元測(cè)試原理與用法實(shí)例分析

    flask框架單元測(cè)試原理與用法實(shí)例分析

    這篇文章主要介紹了flask框架單元測(cè)試原理與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了單元測(cè)試的概念、原理及基本用法,需要的朋友可以參考下
    2019-07-07
  • PyMongo 查詢(xún)數(shù)據(jù)的實(shí)現(xiàn)

    PyMongo 查詢(xún)數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了PyMongo 查詢(xún)數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Python進(jìn)階之如何快速將變量插入有序數(shù)組

    Python進(jìn)階之如何快速將變量插入有序數(shù)組

    在我們學(xué)習(xí)python的過(guò)程中,學(xué)習(xí)序列是一門(mén)必修課。本文我們就來(lái)一起看一看Python是如何快速將變量插入有序數(shù)組的,感興趣的可以了解一下
    2023-04-04
  • Python異常原理及異常捕捉實(shí)現(xiàn)過(guò)程解析

    Python異常原理及異常捕捉實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Python異常原理及異常捕捉實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python?中?yeild?的用法詳解

    Python?中?yeild?的用法詳解

    yield?是?Python?中的關(guān)鍵字,用于生成器函數(shù)中,可以將函數(shù)變成一個(gè)迭代器,實(shí)現(xiàn)惰性計(jì)算,節(jié)省內(nèi)存空間。本文將介紹?yield?的基本用法和實(shí)現(xiàn)原理,以及與?yield?相關(guān)的注意事項(xiàng)和常見(jiàn)問(wèn)題。
    2023-06-06
  • Sanic框架藍(lán)圖用法實(shí)例分析

    Sanic框架藍(lán)圖用法實(shí)例分析

    這篇文章主要介紹了Sanic框架藍(lán)圖用法,結(jié)合實(shí)例形式分析了Sanic框架中藍(lán)圖的功能以及路由控制中藍(lán)圖的定義、注冊(cè)、簡(jiǎn)單使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • 詳解Python給照片換底色(藍(lán)底換紅底)

    詳解Python給照片換底色(藍(lán)底換紅底)

    這篇文章主要介紹了詳解Python給照片換底色(藍(lán)底換紅底),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python Flask 轉(zhuǎn)換器的使用詳解

    Python Flask 轉(zhuǎn)換器的使用詳解

    這篇文章主要介紹了Python_Flask 轉(zhuǎn)換器的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論

东阿县| 南靖县| 武隆县| 驻马店市| 仪征市| 新宾| 佳木斯市| 安远县| 木兰县| 长治市| 大埔区| 商都县| 连南| 勐海县| 汾西县| 隆尧县| 乌兰浩特市| 衡水市| 琼结县| 平定县| 定州市| 阜宁县| 屏东市| 桂阳县| 晋州市| 宜昌市| 温泉县| 兰考县| 屯昌县| 华池县| 河池市| 临猗县| 上饶市| 拜城县| 中西区| 南昌县| 鸡泽县| 荔浦县| 太湖县| 舞钢市| 湾仔区|