什么是 CSRF?

攻擊者利用跨站請求偽造,利用網絡會話中的用戶權限提交惡意請求。攻擊者可以繞過常見的安全限制,誘騙用戶發送偽造的查詢(如 POST、PUT 或 GET),從而刪除或竊取數據,甚至提交危險的資金轉賬。 

與許多最有效的攻擊一樣,CSRF 通常依賴于社交工程。這些黑客攻擊只有在用戶點擊危險鏈接時才會起作用。實現這一點的一種有效方法是誘騙用戶點擊電子郵件或聊天中的鏈接。

如果用戶打開了會話,這些鏈接就會在易受攻擊的網站上觸發破壞性交易。因此,例如,如果電子郵件中的鏈接指向用戶已登錄的網站,攻擊將利用有效的會話 cookie。 

這些攻擊非常普遍,令人沮喪。網站無法保護自己免受社會工程攻擊,因此開發人員只能想辦法在不犧牲用戶便利性和滿意度的情況下阻止 CSRF 攻擊。 

因此,確保保護您的 Web 應用程序免受 CSRF 攻擊至關重要。 

CSRF 攻擊

讓我們看兩個 CSRF 攻擊的例子。然后我們將了解如何保護您的 Lua Web 代碼免受這些攻擊。?

請求確認

這是 HTML 電子郵件的示例。

Lua CSRF 保護指南:示例以及如何啟用圖像

這是一個最基本的例子,但想象一下,一個黑客發送這封電子郵件,其中的品牌是從知名支付服務中竊取的。(出于顯而易見的原因,我們不想在這里這樣做。)攻擊者購買了一個電子郵件列表,并為每封電子郵件生成并發送一條消息。他們賭至少有幾個目標會與該服務進行公開會話,并且沒有密切關注。 

我們看一下鏈接。

Lua CSRF 保護指南:示例以及如何啟用圖像

此鏈接并非確認交易,而是向其他人發起轉賬!該鏈接發送帶有參數的 GET 請求,向名為 techbro 的用戶發送大量資金 

用戶如何保護自己免受這種攻擊?他們可以關注銀行和支付服務發送電子郵件的時間和原因,以及電子郵件的外觀。他們可以仔細閱讀電子郵件,查找錯誤的品牌標識和不恰當的語法。如果他們真的精明的話,他們可能會在點擊鏈接之前先查看一下。 

但大多數用戶不會做這些事情,攻擊只需一次即可成功。 

開發人員有責任確保此類攻擊不會得逞。在討論解決方案之前,我們先來看一個例子。 

不良形式

上例需要用戶點擊鏈接才能運行。點擊后,系統會向銀行發送惡意 GET 請求。如果電子郵件中嵌入了表單,情況會怎樣? 

這是新版本電子郵件攻擊的來源。

<center>
<b>Congratulation!</b></br>
<p>$500.00 has been sent to yourname@youremail.com
<p>Click <a >here</a> to confirm and get your cash!
<form method="post" action="https://www.example.com/xfer">
<input name="amount" type="hidden" value="25000" />
<input name="target" type="hidden" value="techbro" />
</form>
<script>document.forms[0].submit();</script>
</center>

電子郵件看起來完全一樣,但它不是等待用戶點擊鏈接,而是在 HTML 呈現后立即發送 POST 請求!此外,該鏈接也存在攻擊。類似的威脅可能會將確認鏈接附加到具有隱藏值的表單上,而不是隱藏它。使用 HTML 郵件和 HTML 聊天消息進行攻擊的方法有很多種。 

這些例子很初級,而且如上所述,其格式不像更復雜的網絡釣魚攻擊。但不難想象,攻擊會使用從熱門銀行和購物網站竊取的“商業外觀”。 

那么,我們如何保護我們的用戶?

Lua CSRF 保護指南:示例以及如何啟用圖像

Lua CSRF 保護

保護 Web 應用程序免受 CSRF 攻擊的最常見方法是生成令牌并在頁面響應中將其返回給用戶。如果后續請求不包含該令牌,則應用程序知道該請求不安全。 

您可以使用三種方法處理 CSRF 令牌。 

那么如何在 Lua 應用程序中使用這些技術呢? 

編寫自己的令牌

您可以編寫代碼來生成令牌,將其嵌入到頁面中,并確保在需要時將其回顯到您的應用程序。這需要額外的工作和大量測試,但它可以讓您完全控制解決方案。Lua 有用于將令牌添加到網頁或編寫標頭的工具,因此您可以選擇自己的方法。?

這個GitHub Gist包含在 Nginx 的 Lua 模塊中運行的解決方案的示例代碼。?

Nginx Lua

如果您正在運行 Nginx 的Lua 模塊或OpenResty?Web 平臺,則可以使用 Nginx 的Web 應用程序防火墻。它具有許多功能來保護您的應用程序免受攻擊,包括 CSRF。Nginx 生成一個充當 CSRF 令牌的源標頭。您可以將 Nginx 配置為要求特定 URL(例如 POST、PUT 和 DELETE 操作)使用此標頭。?

或者,您可以使用上面鏈接的要點。 

Apache Lua

Apache 沒有內置任何 CSRF 保護功能。有一些第三方模塊,但它們比較老,而且似乎沒有得到積極支持。如果您使用 Apache,則需要編寫自己的代碼。 

青金石

Lapis 具有內置的 CSRF保護功能。它將生成一個共享的加密令牌并在 Web 請求中檢查它。

保護您的 Web 應用程序

這篇文章探討了什么是 CSRF 攻擊以及它們對您和您的 Web 用戶造成的危險。我們研究了兩個示例。這兩個示例都說明了欺詐性電子郵件的危險性以及對未受保護的應用程序發動 CSRF 攻擊是多么容易。然后,我們研究了針對 CSRF 攻擊的典型保護措施,以及如何編寫自己的保護措施或利用 Nginx 和 Lapis 的 CSRF 保護。不幸的是,Apache 應用程序必須冒著第三方模塊的風險或編寫自己的 CSRF 令牌。 

跨站點請求偽造是一種危險的攻擊,但您可以使用記錄良好的工具和流程保護您的應用程序免受此類攻擊。

文章來源:Lua CSRF Protection Guide: Examples and How to Enable

上一篇:

Lua CORS 指南: 它是什么以及如何啟用它

下一篇:

Django Broken 認證指南: 示例和預防
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費