Python web實戰之Django 的跨站點請求偽造(CSRF)保護詳解

? ? ??


關鍵詞:Python、Web、Django、跨站請求偽造、CSRF

大家好,今天我將分享web關于安全的話題:Django 的跨站點請求偽造(CSRF)保護,介紹 CSRF 的概念、原理和保護方法.

640?wx_fmt=png&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1


1. CSRF 是什么?

CSRF,全稱為 Cross-Site Request Forgery,中文翻譯為跨站點請求偽造。

簡單來說,它是一種惡意攻擊方式,黑客利用用戶在另一個網站上的登錄狀態,冒充用戶發送請求,進行非法操作。

舉個例子,你在瀏覽一個論壇的時候,不小心點擊了一個帖子,結果你的賬號信息被竊取,銀行卡被盜刷了!

2. CSRF 的原理

那么,CSRF 攻擊是怎么實現的呢?假設你正在購物網站上瀏覽商品,當你點擊某個商品的時候,網站會發送一個請求給服務器,告訴服務器你想要購買這個商品。

而黑客正是利用這個機制,通過構造惡意頁面,在你不知情的情況下發送請求。服務器收到請求后并不知道這是一個欺騙性的請求,于是執行了對應的操作,可能是刪除商品、修改密碼等等,這就是 CSRF 攻擊的原理。

3. Django 的 CSRF 保護機制

Django 是如何保護我們的網站免受 CSRF 攻擊的?

3.1 CSRF Token

Django 的 CSRF 保護機制主要依賴于 CSRF Token。

這個 Token 是一個隨機生成的字符串,每次請求頁面時都會將它嵌入到表單中或者設置到 Cookie 中。當用戶提交表單時,Django 會檢查請求中的 Token 是否與 Cookie 中的 Token 一致,如果不一致,則拒絕這個請求,從而有效地防止了 CSRF 攻擊。

當然,如果攻擊者能夠獲取到用戶的Cookie,就可以利用這些Cookie來偽造用戶的身份,從而繞過CSRF保護機制。

為了防范這種情況,有幾個常用的方法可以采取:

  1. 使用HttpOnly標記:將Cookie標記為HttpOnly,這樣JavaScript無法訪問Cookie的值,只能在HTTP請求中自動發送。這可以防止大部分的跨站腳本攻擊(XSS)。

#?在Django中設置Cookie為HttpOnly
response.set_cookie('cookie_name',?'cookie_value',?httponly=True)
  1. 啟用Secure標記:將Cookie標記為Secure,這樣它只能通過HTTPS連接進行傳輸。這可以防止中間人攻擊,確保Cookie只在安全的通信通道中傳輸。

#?在Django中設置Cookie為Secure
response.set_cookie('cookie_name',?'cookie_value',?secure=True)
  1. 設置SameSite屬性:通過設置SameSite屬性,可以限制Cookie的發送范圍,確保它只能在同一站點的請求中發送。這可以防止跨站點請求偽造(CSRF)攻擊。

#?在Django中設置Cookie的SameSite屬性
response.set_cookie('cookie_name',?'cookie_value',?samesite='Strict')

3.2 設置 CSRF Token

在 Django 中,設置 CSRF Token 非常簡單。你只需要在表單中添加一個隱藏字段,然后在后端代碼中通過模板標簽將 Token 插入到該字段中即可:

<form?method="post">{%?csrf_token?%}<!--?其他表單字段?--><button?type="submit">提交</button>
</form>

3.3 驗證 CSRF Token

當用戶提交表單時,Django 會自動驗證 CSRF Token 的有效性。

如果 Token 不匹配,Django 會拋出一個異常,你可以在代碼中捕獲這個異常,并采取相應的處理措施,例如返回一個錯誤頁面或者重新生成 Token。

也可以顯式關閉CSRF:

from?django.shortcuts?import?render
from?django.views.decorators.csrf?import?csrf_exempt#?裝飾器,用于關閉?CSRF?保護@csrf_exempt
def?my_view(request):
\#?處理請求的邏輯代碼
return?render(request,?'my_template.html')

在上面的示例代碼中,我們使用了?csrf_exempt?裝飾器來關閉 CSRF 保護,這樣就可以在視圖函數?my_view?中處理請求而不受 CSRF Token 的限制。

當然,在實際開發中并不建議關閉 CSRF 保護,而是要正確地使用 CSRF Token 來保護網站的安全性。

4. 技術總結

本文詳細介紹了 Django 中的跨站點請求偽造(CSRF)保護機制。實際開發中,僅僅靠CSRF機制并不是絕對安全的,還應該結合其他安全措施,綜合多種技術來確保應用程序的安全性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43679.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微服務與Nacos概述-6

RBAC 模型 RBAC 基于角色的訪問控制是實施面向企業安全策略的一種有效的訪問控制方式。 基本思想是&#xff0c;對系統操作的各種權限不是直接授予具體的用戶&#xff0c;而是在用戶集合與權限集合之間建立一個角色集合。每一種角色對應一組相應的權限。一旦用戶被分配了適當…

【MySQL】MySQL基礎知識詳解(一)

MySQL select列的別名去除重復行空值參與運算著重號查詢常數顯示表結構過濾數據 排序使用 ORDER BY 對查詢到的數據進行排序操作。使用列的別名&#xff0c;進行排序二級排序 分頁LIMIT 分頁顯示公式&#xff1a;&#xff08;當前頁數減一&#xff09;*每頁條數&#xff0c;每頁…

【AIGC】 快速體驗Stable Diffusion

快速體驗Stable Diffusion 引言一、安裝二、簡單使用2.1 一句話文生圖2.2 詳細文生圖 三、進階使用 引言 stable Diffusion是一款高性能的AI繪畫生成工具&#xff0c;相比之前的AI繪畫工具&#xff0c;它生成的圖像質量更高、運行速度更快&#xff0c;是AI圖像生成領域的里程碑…

【100天精通python】Day41:python網絡爬蟲開發_爬蟲基礎入門

目錄 專欄導讀 1網絡爬蟲概述 1.1 工作原理 1.2 應用場景 1.3 爬蟲策略 1.4 爬蟲的挑戰 2 網絡爬蟲開發 2.1 通用的網絡爬蟲基本流程 2.2 網絡爬蟲的常用技術 2.3 網絡爬蟲常用的第三方庫 3 簡單爬蟲示例 專欄導讀 專欄訂閱地址&#xff1a;https://blog.csdn.net/…

【玩轉Linux操作】crond的基本操作

&#x1f38a;專欄【玩轉Linux操作】 &#x1f354;喜歡的詩句&#xff1a;更喜岷山千里雪 三軍過后盡開顏。 &#x1f386;音樂分享【Counting Stars 】 歡迎并且感謝大家指出小吉的問題&#x1f970; 文章目錄 &#x1f354;概述&#x1f354;命令?常用選項 &#x1f354;練…

軟件-常用軟件系統架構

目錄 1.客戶端-服務器架構 2.分布式架構 3.微服務架構 4.事件驅動架構 5.單體架構 6.混合架構 當我們談論系統架構時&#xff0c;可以將其比喻為一座房子的設計和結構&#xff0c;想象一下你計劃建造一座豪華別墅&#xff0c;你需要考慮各種因素&#xff1a;如房子的大小…

linux下常見編譯問題

linux下常見編譯問題 linux-cmake靜態編譯查看系統支持的的libc版本查看程序需要的動態鏈接庫查看程序需要的libc版本freebsd下 linux-cmake靜態編譯 CMakeLists.txt 添加 set(CMAKE_EXE_LINKER_FLAGS "-static")ELF 64-bit LSB executable, AMD x86-64, version 1…

【微服務】一文了解 Nacos

一文了解 Nacos Nacos 在阿里巴巴起源于 2008 2008 2008 年五彩石項目&#xff08;完成微服務拆分和業務中臺建設&#xff09;&#xff0c;成長于十年雙十一的洪峰考驗&#xff0c;沉淀了簡單易用、穩定可靠、性能卓越的核心競爭力。 隨著云計算興起&#xff0c; 2018 2018 20…

編程練習(3)

一.選擇題 第一題&#xff1a; 函數傳參的兩個變量都是傳的地址&#xff0c;而數組名c本身就是地址&#xff0c;int型變量b需要使用&符號&#xff0c;因此答案為A 第二題&#xff1a; 本題考察const修飾指針變量&#xff0c;答案為A,B,C,D 第三題&#xff1a; 注意int 型變…

13---內嵌HTML和React

雖然Markdown本身不支持內嵌HTML和React&#xff0c;但可以在Markdown文檔中直接插入HTML代碼和React組件。 一、在markdown中內嵌HTML 在Markdown中&#xff0c;你可以使用HTML標簽來實現更復雜的樣式和布局。例如&#xff0c;你可以使用<div>標簽來創建一個容器&#…

算法與數據結構(五)--樹與二叉查找樹

符號表的增刪查操作&#xff0c;隨著元素個數N的增多&#xff0c;其耗時也是線性增多的&#xff0c;時間復雜度都是O(n)&#xff0c;為了提高運算效率&#xff0c;我們學習樹這種數據結構。 目錄 一.樹的基本定義 二.樹的相關術語 三.二叉樹的基本定義 四.二叉樹的鏈表實現…

leetcode 279. 完全平方數

2023.8.18 與零錢兌換相似&#xff0c;本題屬于完全背包問題&#xff1a;完全平方數為物品&#xff0c;整數n為背包。 直接上代碼&#xff1a; class Solution { public:int numSquares(int n) {vector<int> dp(n1 , INT_MAX);dp[0] 0;for(int i1; i*i<n; i){for(in…

時序預測 | MATLAB實現WOA-CNN-BiGRU鯨魚算法優化卷積雙向門控循環單元時間序列預測

時序預測 | MATLAB實現WOA-CNN-BiGRU鯨魚算法優化卷積雙向門控循環單元時間序列預測 目錄 時序預測 | MATLAB實現WOA-CNN-BiGRU鯨魚算法優化卷積雙向門控循環單元時間序列預測預測效果基本介紹模型描述程序設計參考資料 預測效果 基本介紹 時序預測 | MATLAB實現WOA-CNN-BiGRU鯨…

干翻Dubbo系列第十二篇:Dubbo協議介紹

文章目錄 文章說明 一&#xff1a;Dubbo協議 1&#xff1a;Dubbo協議簡介 2&#xff1a;Dubbo協議優點 3&#xff1a;Dubbo協議幀的組成 (一)&#xff1a;幻數 (二)&#xff1a;2Way (三)&#xff1a;event (四)&#xff1a;Serilization ID (五)&#xff1a;status …

每日一題 142環形鏈表||(快慢指針)

題目 給定一個鏈表的頭節點 head &#xff0c;返回鏈表開始入環的第一個節點。 如果鏈表無環&#xff0c;則返回 null。 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表中的環&#xff0c;評測系統內部…

深入理解【二叉樹】

&#x1f4d9;作者簡介&#xff1a; 清水加冰&#xff0c;目前大二在讀&#xff0c;正在學習C/C、Python、操作系統、數據庫等。 &#x1f4d8;相關專欄&#xff1a;C語言初階、C語言進階、C語言刷題訓練營、數據結構刷題訓練營、有感興趣的可以看一看。 歡迎點贊 &#x1f44d…

Java中的異常

認識異常 異常就是程序出現的問題&#xff1b; Integer.valueOf("aaaa"); 異常體系 因為寫代碼時經常會出現問題&#xff0c;Java的設計者們早就為我們寫好了很多個異常類&#xff0c;來描述不同場景下的問題。而有些類是有共性的所以就有了異常的繼承體系 Error&…

日志采集分析ELK

這里的 ELK其實對應三種不同組件 1.ElasticSearch&#xff1a;基于Java&#xff0c;一個開源的分布式搜索引擎。 2.LogStash&#xff1a;基于Java&#xff0c;開源的用于收集&#xff0c;分析和存儲日志的工具。&#xff08;它和Beats有重疊的功能&#xff0c;Beats出現之后&a…

OLED透明屏采購指南:如何選擇高質量產品?

著科技的不斷進步&#xff0c;OLED透明屏作為一種創新的顯示技術&#xff0c;在各個行業中得到了廣泛應用。 在進行OLED透明屏采購時&#xff0c;選擇高質量的產品至關重要。在這篇文章中&#xff0c;尼伽將為您提供一個全面的OLED透明屏采購指南&#xff0c;幫助您了解關鍵步…

day20 飛機大戰射擊游戲

有飛行物類 飛行 爆炸 的連環畫&#xff0c; 飛行的背景圖 &#xff0c; 子彈圖&#xff0c; 還有游戲開始 暫停 結束 的畫面圖。 設計一個飛機大戰的小游戲&#xff0c; 玩家用鼠標操作hero飛行機&#xff0c; 射出子彈殺死敵機&#xff0c;小蜜蜂。 敵機可以獲得分數&…