iT邦幫忙

2022 iThome 鐵人賽

DAY 18
1
Software Development

ASP.NET Core 30 天旅程系列 第 18

[Day18]-防止跨網站偽造要求 (XSRF/CSRF) 攻擊

  • 分享至 

  • xImage
  •  

跨站請求偽造,也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制使用者在當前已登入的Web應用程式上執行非本意的操作的攻擊方法。跟跨網站指令碼(XSS)相比,XSS 利用的是使用者對指定網站的信任,CSRF 利用的是網站對使用者網頁瀏覽器的信任。

CSRF 攻擊的範例:
假如一家銀行用以執行轉帳操作的URL位址如下: https://good-banking-site.com/account?account=AccoutName&amount=1000&for=PayeeName

那麼,一個惡意攻擊者可以在另一個網站上放置如下代碼:

如果有帳戶名為Olivia的使用者存取了惡意站點,而她之前剛存取過銀行不久,登錄資訊尚未過期,那麼她就會損失1000資金。

除了使用者選取 Submit 按鈕的案例之外,惡意網站可能:

  • 執行自動提交表單的腳本。
  • 以 AJAX 要求形式傳送表單提交。
  • 使用 CSS 隱藏表單。

這種惡意的網址可以有很多種形式,藏身於網頁中的許多地方。此外,攻擊者也不需要控制放置惡意網址的網站。例如他可以將這種位址藏在論壇,部落格等任何使用者生成內容的網站中。這意味著如果伺服器端沒有合適的防禦措施的話,使用者即使存取熟悉的可信網站也有受攻擊的危險。

攻擊者並不能通過CSRF攻擊來直接獲取使用者的帳戶控制權,也不能直接竊取使用者的任何資訊。他們能做到的,是欺騙使用者的瀏覽器,讓其以使用者的名義執行操作。

Antiforgery

注意
ASP.NET Core 使用 ASP.NET Core Data Protection 來實行 antiforgery。 資料保護堆疊必須設定為可在伺服器陣列中運作。

在呼叫下列其中一個 API 時,Antiforgery Middleware 會新增至DI Container 中:

  • AddMvc
  • MapRazorPages
  • MapControllerRoute
  • MapBlazorHub

FormTagHelper 會將 Antiforgery Token 插入 HTML 表單元素中。 檔案中的 Razor 下列標記會自動產生Antiforgery Token

<form method="post">
</form>

如果表單的方法不是 GETIHtmlHelper.BeginForm 則預設會產生 Antiforgery Token。

當標籤包含 method="post" 屬性且下列任一項成立時 就會自動產生 HTML 表單專案的 Antiforgery 標記
1.動作屬性是空的 (action="") 。
2.動作屬性未提供 () 。

Razor 頁面會自動受到 XSRF/CSRF 的保護

使用 HTML helper 加入 antiforgery token

<form asp-action="Index" asp-controller="Home" method="post">
    @Html.AntiForgeryToken()

    <!-- ... -->
</form>

使用 HTML helper 產生表單的 tag

@using (Html.BeginForm("Index", "Home"))
{
    <!-- ... -->
}

在上述兩個案例中,ASP.NET Core新增類似下列範例的隱藏表單欄位:

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">

Filters

ASP.NET Core包含三個篩選準則,可用於 Antiforgery Token:

  • ValidateAntiForgeryToken
  • AutoValidateAntiforgeryToken
  • IgnoreAntiforgeryToken

以上三個篩選準則明天再寫囉~


參考資料

跨站請求偽造
Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core


上一篇
[Day17]-防止跨網站腳本 (XSS) 攻擊
下一篇
[Day19]- Antiforgery Token 的 Filters
系列文
ASP.NET Core 30 天旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言