什麼是跨站點請求偽造?

跨網站偽造要求攻擊誘使受害者使用他們的認證來叫用狀態更改活動。

學習目標

閱讀本文後,您將能夠:

  • 定義跨網站偽造要求 (CSRF)
  • 說明 CSRF 攻擊的運作方式
  • 探索緩解 CSRF 攻擊的方法

相關內容


想要繼續瞭解嗎?

訂閱 TheNET,這是 Cloudflare 每月對網際網路上最流行見解的總結!

請參閱 Cloudflare 的隱私權政策,了解我們如何收集和處理您的個人資料。

複製文章連結

什麼是跨網站偽造要求 (CSRF)?

跨網站偽造要求攻擊是一種混淆代理*網路攻擊,它會誘使使用者意外使用其認證來叫用狀態變更活動,例如從他們的帳戶轉移資金、變更他們的電子郵件地址和密碼或其他一些不受歡迎的動作。

儘管對普通使用者的潛在影響已經很大,但對管理帳戶的成功 CSRF 攻擊可能會危及整個伺服器,可能導致完全接管 Web 應用程式、API 或其他服務。

跨網站偽造要求如何運作?

此攻擊主要針對狀態變更要求,即導致資料從一個值變更為另一個值的要求類型。例如,針對的要求可能會進行購買或變更帳戶中的值。有趣的是,這是一種「盲目攻擊」,並且不會將資料傳回給攻擊者,所以這並不是資料竊取的好選擇。

以下是一個跨網站偽造要求攻擊的範例,其中包含 4 個步驟:

  1. 攻擊者建立一個偽造的要求,該要求在執行時會將 10,000 美元從特定銀行轉入攻擊者的帳戶。
  2. 攻擊者將偽造的要求嵌入到超連結中,以批量電子郵件的形式傳送出去,並將其嵌入到網站中。
  3. 受害者點擊攻擊者放置的電子郵件或網站連結,導致受害者向銀行提出轉帳 10,000 美元的要求。
  4. 銀行伺服器接收到要求,並且由於受害者得到了適當的授權,它將要求視為合法並轉移資金。
偽造的要求

CSRF 攻擊的方法各不相同,但通常具有以下特徵:

  1. 它們利用依賴使用者身分的網站
  2. 它們誘使使用者的瀏覽器將 HTTP 要求傳送到目標網站
  3. 它們涉及使用具有副作用且沒有適當的 CSRF 保護的 HTTP 要求

不同的 HTTP 動詞遭受 CSRF 攻擊的難易程度不同,從而導致了不同的保護策略。這是由於 Web 瀏覽器處理動詞的方式不同。

HTTP GET 要求具有嵌入的參數,例如影像標籤內的參數,這些參數可能被操縱和利用。通常,GET 要求不會修改狀態,因此對於正確實作的 Web 應用程式或其他資源,它們無法作為 CSRF 的目標。

HTTP POST 用於變更狀態,因此需要更多保護。為此,Web 瀏覽器實作了稱為相同原始原則 (SOP) 和跨原始來源資源共用 (CORS)(其中包含跨原始來源安全性原則)的安全措施。SOP 只允許來自同一來源的要求,而 CORS 只允許某些類型的要求來自不同的來源。透過限制要求或網頁與不同來源互動的能力,這些實作的組合有助於防止 CSRF 攻擊(以及其他攻擊)。

其他 HTTP 動詞(例如 PUT 和 DELETE)只能使用 SOP 和 CORS 執行,從而減輕許多跨網站攻擊。

雖然不常見,但一些網站會明確停用這些安全措施,也可能在 Web 瀏覽器中停用它們。

如何緩解跨網站偽造要求?

緩解 CSRF 攻擊的最常見方法是透過兩種方法之一利用 Anti-CSRF 權杖。雖然權杖實作略有不同,但基本原理保持不變;透過建立然後比較隨機產生的權杖字串,攻擊者幾乎無法猜到這些字串,也就不太可能執行攻擊。

同步器權杖模式:

當使用者造訪網頁時,例如允許轉帳的銀行網頁,銀行的網站會在表單中嵌入一個隨機權杖。當使用者提交表單時,隨機權杖被傳回,銀行能夠檢查兩個權杖是否匹配。如果權杖匹配,則會轉帳。攻擊者無法存取網頁中建立的隨機權杖值,如果他們請求該頁面,相同原始原則將阻止攻擊者讀取回應。

這種緩解方法的缺點是它增加了伺服器端檢查每個請求的權杖有效性的負擔。如果使用者有多個瀏覽器視窗或涉及不同軟體發出請求的其他情況,它也會產生問題。透過將權杖的範圍擴展到每個工作階段而不是每個請求,可以避免其中的一些困難。

Cookie-to-header 權杖:

另一種方法涉及向訪客的 Web 瀏覽器發出包含隨機權杖的 cookie。在用戶端運作的 JavaScript 將讀取 cookie 中權杖的值並將其複製到 HTTP 標頭中,該標頭將隨每個要求一起傳送。如果使用者傳送的是真正的要求,則標頭中的值可以由伺服器驗證。任何其他情況都將失敗,從而減少成功的攻擊。

透過 WAF 使用自訂規則,使用者能夠協助防止某些 CSRF 攻擊。探索 Cloudflare 的 Web 應用程式防火牆

*混淆代理問題

混淆代理是指被愚弄而濫用其授權的電腦程式。與此類漏洞相關的風險就是為什麼基於功能的安全性有助於降低與濫用相關的風險。例如,在安裝軟體時,如今的大多數電腦都要求使用者登入。這有助於防止在使用者意外使用其權限授權安裝時無意間執行代碼。