跨站請求偽造之基本介紹

一.基本概念

1.定義

跨站請求偽造(Cross - Site Request Forgery,縮寫為 CSRF)漏洞是一種網絡安全漏洞。它是指攻擊者通過誘導用戶訪問一個惡意網站,利用用戶在被信任網站(如銀行網站、社交網站等)的登錄狀態,在用戶不知情的情況下,讓用戶的瀏覽器向被信任網站發送非用戶本意的請求,從而執行一些操作,比如修改用戶信息、進行轉賬等操作。

2.示例
  • 假設用戶已經登錄了一個網上銀行網站bank.com?,其會話 ID 存儲在瀏覽器的 Cookie 中。攻擊者創建了一個惡意網站evil.com?,在這個網站上有如下 HTML 代碼:

    <form action="https://bank.com/transfer" method="post"><input type="hidden" name="amount" value="1000" /><input type="hidden" name="recipient" value="attacker_account" />
    </form>
    <script>document.forms[0].submit();
    </script>
    
  • 當用戶訪問evil.com?時,瀏覽器會自動提交這個表單,向bank.com?發送一個轉賬請求。由于瀏覽器會帶上用戶在bank.com?的會話 Cookie,bank.com?會認為這個請求是用戶自己發起的,從而可能導致用戶的資金被盜轉。

3.危害
  • 用戶數據泄露和篡改:攻擊者可以通過 CSRF 漏洞獲取用戶的敏感信息,如修改用戶密碼、郵箱地址等,從而進一步控制用戶賬戶。
  • 經濟損失:在涉及金融交易的網站上,攻擊者可以利用 CSRF 漏洞進行非法轉賬、購物等操作,給用戶造成直接的經濟損失。
  • 破壞系統功能和信譽:可以對系統的正常功能造成干擾,如大量發送虛假請求,導致系統資源被濫用。同時,也會影響用戶對網站的信任,損害網站的信譽。

二.漏洞類型

GET型CSRF
1.定義

GET 型 CSRF(Cross - Site Request Forgery)是 CSRF 攻擊的一種類型。在這種攻擊方式中,攻擊者誘導用戶的瀏覽器發起一個 HTTP GET 請求,利用用戶在目標網站的登錄狀態,在用戶不知情的情況下執行目標網站上的某些操作。

2.攻擊流程
  1. 構造惡意鏈接:攻擊者首先會構造一個包含惡意請求的鏈接。因為 HTTP GET 請求通常用于獲取資源,在網頁中,鏈接(<a>?標簽)、圖像(<img>?標簽)、腳本(<script>?標簽)等元素都可以發起 GET 請求。

  2. 利用自動請求機制:

    • 例如,使用<img>?標簽來發起攻擊。攻擊者在惡意網站上放置一個<img>?標簽,將其src?屬性設置為目標網站帶有惡意操作的 GET 請求鏈接。當用戶訪問這個惡意網站時,瀏覽器會自動嘗試加載這個圖像,從而發送這個 GET 請求。
    • 同樣,對于<a>?標簽,攻擊者可以設置href?屬性為惡意鏈接,然后通過一些手段(如欺騙用戶點擊看起來正常的鏈接)來讓用戶觸發這個請求。不過這種方式相對比較容易被用戶察覺,因為用戶可能會看到鏈接的地址。
  3. 利用用戶會話狀態:就像其他類型的 CSRF 攻擊一樣,GET 型 CSRF 依賴于用戶在目標網站的會話狀態。當瀏覽器發送這個惡意的 GET 請求時,會自動帶上用戶在目標網站的會話 Cookie,目標網站收到請求后,由于有有效的會話標識,就可能會執行這個請求,以為是用戶自己發起的操作。

3.示例
  • 假設一個社交網站有一個點贊功能,其點贊的接口是https://social.com/like?post_id=123?,正常情況下,用戶點擊社交網站上的點贊按鈕會發送這個 GET 請求來為 ID 為 123 的帖子點贊。

  • 攻擊者在惡意網站上放置了這樣的代碼:

    <img src="https://social.com/like?post_id=123" alt="malicious_image" />
    
  • 當用戶訪問這個惡意網站時,瀏覽器會自動加載這個 “圖像”,實際上就發送了一個點贊的 GET 請求。由于用戶在社交網站的會話 Cookie 會被一起發送,社交網站就可能會為帖子 ID 為 123 的內容點贊,而用戶對此可能完全不知情。

POST型CSRF
1.定義

POST 型 CSRF(Cross - Site Request Forgery)是一種跨站請求偽造攻擊類型,它利用 HTTP POST 請求來實施攻擊。攻擊者通過誘導用戶在已登錄目標網站的狀態下,在用戶瀏覽器不知情的情況下發送包含惡意意圖的 POST 請求,從而導致目標網站執行非用戶本意的操作。

2.攻擊流程
  1. 構造惡意表單:攻擊者在惡意網站上構造一個包含目標網站惡意操作的表單。表單的action?屬性指向目標網站中執行關鍵操作的 URL,例如銀行轉賬的提交 URL、用戶信息修改的提交頁面等。表單的各個字段則填寫攻擊者想要執行的操作參數,如轉賬金額、修改后的用戶信息等。

  2. 自動提交表單或誘使用戶提交:

    • 攻擊者可以使用 JavaScript 代碼來自動提交表單。例如,在惡意 HTML 頁面中有如下代碼:

      <form id="attackForm" action="https://target.com/transfer" method="post"><input type="hidden" name="amount" value="1000" /><input type="hidden" name="recipient" value="attacker_account" />
      </form>
      <script>document.getElementById('attackForm').submit();
      </script>
      
    • 當用戶訪問這個惡意網站時,瀏覽器會自動提交這個表單,向目標網站發送一個 POST 請求。或者,攻擊者也可以通過一些手段誘使用戶手動提交表單,例如將提交按鈕偽裝成一個吸引人的鏈接或按鈕,讓用戶在不知情的情況下點擊。

  3. 利用用戶會話狀態:和 GET 型 CSRF 一樣,POST 型 CSRF 也依賴于用戶在目標網站的會話狀態。當瀏覽器發送這個 POST 請求時,會自動帶上用戶在目標網站的會話 Cookie,目標網站收到請求后,由于收到了帶有有效用戶會話標識(Cookie)的請求,就會執行這個請求,以為是用戶自己發起的操作。

三.防御措施

  • 使用 CSRF 令牌(Token):

    • 網站在生成表單或關鍵請求時,同時生成一個唯一的 CSRF 令牌并將其包含在表單中或者作為請求頭的一部分。當服務器收到請求時,會驗證這個令牌是否有效。因為攻擊者無法輕易獲取這個令牌,所以無法偽造有效的請求。
  • 驗證請求來源(Referer 檢查):

    • 服務器可以檢查請求的來源(即Referer?頭信息),如果請求來自一個不可信的源,就拒絕這個請求。不過這種方法有一定的局限性,因為Referer?頭信息可以被瀏覽器插件或者用戶自己修改。
  • Same - Site Cookie 屬性設置:

    • 可以將 Cookie 的Same - Site?屬性設置為Strict?或者Lax?。Strict?模式下,瀏覽器只有在用戶從同一站點訪問時才會發送 Cookie;Lax?模式稍微寬松一些,在一些安全的跨站導航場景下也允許發送 Cookie。這樣可以限制 Cookie 在跨站請求中的濫用,從而減輕 CSRF 攻擊的風險。

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

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

相關文章

Pytorch | 利用BIM/I-FGSM針對CIFAR10上的ResNet分類器進行對抗攻擊

Pytorch | 利用BIM/I-FGSM針對CIFAR10上的ResNet分類器進行對抗攻擊 CIFAR數據集BIM介紹基本原理算法流程 BIM代碼實現BIM算法實現攻擊效果 代碼匯總bim.pytrain.pyadvtest.py 之前已經針對CIFAR10訓練了多種分類器&#xff1a; Pytorch | 從零構建AlexNet對CIFAR10進行分類 Py…

如何更好的進行時間管理

先想一下我們想要做的事情&#xff0c;然后拿出Excel表格將這些事情記錄下來&#xff0c;我們把它叫做任務對這些任務按照重要性&#xff0c;緊急程度進行排序&#xff0c;拿出表格中的前六個任務&#xff0c;就是今天要做的任務新建另一張excel表格&#xff0c;表格的一列為時…

OpenGL —— 2.6.1、繪制一個正方體并貼圖渲染顏色(附源碼,glfw+glad)

源碼效果 C++源碼 紋理圖片 需下載stb_image.h這個解碼圖片的庫,該庫只有一個頭文件。 具體代碼: vertexShader.glsl #version

ubuntu開機進入initramfs狀態

虛擬機卡死成功起后進入了initramfs狀態&#xff0c;可能是跟文件系統有問題或者檢索不到根文件系統&#xff0c;或者是配置錯誤&#xff0c;系統磁盤等硬件問題導致 開機后進入如下圖的界面&#xff0c; 文中有一條提示 要手動fsck 命令修復 /dev/sda1 命令如下 fsck /de…

java根據Word模板實現動態填充導出

最近項目中需要導出Word&#xff0c;根據不同的信息導出不同的內容&#xff0c;包含文本、列表、圖片等&#xff0c;本文使用poi-tl實現在次做以記錄。 添加依賴 <!-- word導出 --> <dependency><groupId>com.deepoove</groupId><artifactId>po…

mindie推理大語言模型問題及解決方法匯總

問題說明 使用功能mindie 1.0 RC2推理大語言模型&#xff0c;遇到不少問題&#xff0c;記錄下解決思路。 我的硬件是910B4。 問題及解決 問題1 在docker內啟動mindie時終端報錯 Fatal Python error: PyThreadState_Get: the function must be called with the GIL held, …

Selenium 全面指南

Selenium 是一個強大的 Web 自動化工具&#xff0c;支持多種瀏覽器和語言綁定。 1. Selenium 的基本概念 WebDriver&#xff1a;Selenium 提供的核心接口&#xff0c;用于控制瀏覽器操作。顯式等待&#xff1a;等待特定條件滿足后再執行操作。隱式等待&#xff1a;全局設置一個…

Go框架比較:goframe、beego、iris和gin

由于工作需要&#xff0c;這些年來也接觸了不少的開發框架&#xff0c;Golang的開發框架比較多&#xff0c;不過基本都是Web"框架"為主。這里稍微打了個引號&#xff0c;因為大部分"框架"從設計和功能定位上來講&#xff0c;充其量都只能算是一個組件&…

【華為OD-E卷-木板 100分(python、java、c++、js、c)】

【華為OD-E卷-木板 100分&#xff08;python、java、c、js、c&#xff09;】 題目 小明有 n 塊木板&#xff0c;第 i ( 1 ≤ i ≤ n ) 塊木板長度為 ai。 小明買了一塊長度為 m 的木料&#xff0c;這塊木料可以切割成任意塊&#xff0c;拼接到已有的木板上&#xff0c;用來加…

sqlserver臨時表來做表聯查復雜查詢

使用臨時表&#xff0c;先查詢出結果&#xff0c;在用于后面表的子查詢或者聯查 -- 刪除表1if EXISTS ( SELECT 1 FROM tempdb.sys.objects where name like #temp_PublishRecord% ) beginDROP TABLE #temp_PublishRecordprint 已刪除臨時表 #temp_PublishRecordend--創…

OMG DDS 規范漫談:分布式數據交互的演進之路

一、由來與起源脈絡 OMG DDS&#xff08;Object Management Group Data Distribution Service&#xff09;的發展是計算機科學和技術進步的一個縮影&#xff0c;它反映了對高效、可靠的數據共享需求的響應。DDS 的概念萌生于20世紀90年代末&#xff0c;當時分布式計算已經從理…

1.使用 Couchbase 數倉和 Temporal(一個分布式任務調度和編排框架)實現每 5 分鐘的增量任務

在使用 Couchbase 數倉和 Temporal&#xff08;一個分布式任務調度和編排框架&#xff09;實現每 5 分鐘的增量任務時&#xff0c;可以按照以下步驟實現&#xff0c;同時需要注意關鍵點。 實現方案 1. 數據層設計&#xff08;Couchbase 增量存儲與標記&#xff09; 在 Couchb…

Spring源碼分析之AOP-@EnableAspectJAutoProxy

前言 這篇文章之前我們說了Springboot的啟動流程,Bean對象怎么實現從無到有的一個過程還有一些接口的拓展的實現等等那么從這一篇文章開始的話我們就會開始說一說我們的常用的AOP它的底層實現原理所以大家一起加油加油&#xff01;&#xff01;&#xff01; AOP: 1.簡介: AOP的…

Linux(Centos 7.6)基本信息查看

1.服務器硬件信息查看 1.1.服務器廠商、產品名稱查看 dmidecode -s system-manufacturer&#xff1a;查看服務器廠商信息 dmidecode -s system-product-name&#xff1a;查看服務器產品名稱信息 1.Windows使用VMware安裝的Linux(Centos 7.6)后&#xff0c;服務器廠商、產品名…

多個圖片轉換為PDF文件

將多個圖片轉換為PDF文件在Python中可以通過多個庫來實現&#xff0c;其中最常用的庫之一是Pillow&#xff08;用于圖像處理&#xff09;和reportlab&#xff08;用于生成PDF&#xff09;。不過&#xff0c;對于直接圖片轉PDF的操作&#xff0c;更推薦使用Pillow配合PyMuPDF&am…

小程序app封裝公用頂部篩選區uv-drop-down

參考ui:DropDown 下拉篩選 | 我的資料管理-uv-ui 是全面兼容vue32、nvue、app、h5、小程序等多端的uni-app生態框架 樣式示例&#xff1a; 封裝公用文件代碼 dropDownTemplete <template><!-- 頂部下拉篩選區封裝公用組件 --><view><uv-drop-down ref&…

LeetCode:101. 對稱二叉樹

跟著carl學算法&#xff0c;本系列博客僅做個人記錄&#xff0c;建議大家都去看carl本人的博客&#xff0c;寫的真的很好的&#xff01; 代碼隨想錄 LeetCode&#xff1a;101. 對稱二叉樹 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱。 示例 1&#xff1a; 輸…

Docker-如何啟動docker

作者介紹&#xff1a;簡歷上沒有一個精通的運維工程師。希望大家多多關注作者&#xff0c;下面的思維導圖也是預計更新的內容和當前進度(不定時更新)。 我們在上一章&#xff0c;講了虛擬化&#xff0c;虛擬化是把硬件虛擬化&#xff0c;然后創建出來的虛擬機完全隔離&#xff…

COMSOL with Matlab

文章目錄 基本介紹COMSOL with MatlabCOMSOL主Matlab輔Matlab為主Comsol為輔 操作步驟常用指令mphopenmphgeommghmeshmphmeshstatsmphnavigatormphplot常用指令mphsavemphlaunchModelUtil.clear 實例教學自動另存新檔**把語法套用到邊界條件**把語法套用到另存新檔 函數及其微分…

游戲關卡設計方法的雜感

1、正規思路是&#xff1a;先寫設計文檔&#xff0c;畫平面圖&#xff0c;再做白模關卡&#xff0c;再做正規模型的關卡。 一步步擴大。 當然是有道理的&#xff0c;從小到大&#xff0c; 但實際上這需要很強的想象力&#xff0c;很多細節靠腦補&#xff0c;初學者很難做好。…