防範跨站請求偽造(CSRF)攻擊:實現安全的 C# 和 ASP.NET Core Web 應用程式的關鍵策略

CSRF 代表跨站請求偽造,這是一種網路安全漏洞,它利用了網站對用戶瀏覽器的信任。在 CSRF 攻擊中,攻擊者誘使用戶在他們當前已經通過身份驗證的 Web 應用程序上執行不需要的操作。這可能導致未經授權的操作,例如更改用戶的電子郵件地址、進行購買,甚至在用戶未經同意或知情的情況下轉賬。

CSRF 攻擊通常涉及以下步驟:

  1. 攻擊者創建一個惡意鏈接,或者在用戶訪問的網頁中嵌入腳本。

  2. 惡意鏈接或腳本生成對目標 Web 應用程式的未經授權的請求,而用戶已經在該應用程式中通過身份驗證。

  3. 用戶的瀏覽器會自動將任何相關的身份驗證信息(例如,cookie)與請求一起發送。

  4. 目標 Web 應用程序處理請求,卻不知道該請求並非由用戶有意發起的。

為了防止 CSRF 攻擊,開發人員可以實施各種安全措施,例如使用反 CSRF 令牌、驗證源和引用者頭,以及為 cookie 使用 SameSite 屬性。

 

在 C# 中,可以使用以下方法來減少 CSRF 攻擊的風險:

  1. 使用 ASP.NET Core 的內置防護:

在 ASP.NET Core 中,CSRF 防護是內置的。通過在控制器的動作方法上添加 [ValidateAntiForgeryToken] 屬性,以及在表單中添加 @Html.AntiForgeryToken() 可以啟用這些內置的防護機制。例如:

 

// 在控制器中
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateEmail(EmailUpdateModel model)
{
    // 更新電子郵件邏輯
}

// 在視圖中
@using (Html.BeginForm("UpdateEmail", "Account", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    // 表單字段
    <input type="submit" value="Update Email" />
}
  1. 檢查 HTTP 請求的源(檢查 Origin 和 Referer 頭):

為了確保請求來自合法的源,可以檢查請求的 Origin 和 Referer 頭。以下是一個簡單的範例,用於檢查請求的源:

public bool IsRequestFromSameOrigin(HttpRequest request)
{
    var origin = request.Headers["Origin"];
    var referer = request.Headers["Referer"];

    if (string.IsNullOrEmpty(origin) && string.IsNullOrEmpty(referer))
    {
        return false;
    }

    var applicationUrl = "https://example.com"; // 替換為你的應用程序的實際 URL

    if (!string.IsNullOrEmpty(origin) && !origin.Equals(applicationUrl, StringComparison.OrdinalIgnoreCase))
    {
        return false;
    }

    if (!string.IsNullOrEmpty(referer) && !referer.StartsWith(applicationUrl, StringComparison.OrdinalIgnoreCase))
    {
        return false;
    }

    return true;
}

在你的控制器動作方法中使用此方法檢查請求是否來自相同的源:

[HttpPost]
public ActionResult UpdateEmail(EmailUpdateModel model)
{
    if (!IsRequestFromSameOrigin(Request))
    {
        // 如果請求不是來自相同的源,則拒絕請求
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Invalid request origin");
    }

    // 更新電子郵件邏輯
}

這些方法可以幫助保護你的 ASP.NET Core 應用程式免受 CSRF 攻擊。

以下是一些有關 CSRF 防護、網絡安全以及 C# 和 ASP.NET Core 的參考資源:

  1. OWASP(開放 Web 應用安全項目):

  2. Microsoft 官方文檔:

  3. C# 和 .NET 相關書籍:

    • C# in Depth, Fourth Edition,作者:Jon Skeet

    • Pro ASP.NET Core 3: Develop Cloud-Ready Web Applications Using MVC, Blazor, and Razor Pages,作者:Adam Freeman

  4. 線上教程和博客:

以上資源涵蓋了有關 CSRF 防護、C# 和 ASP.NET Core 的基本知識和高級技巧。在這些資源中,你可以找到有關網路安全最佳實踐的詳細信息,以確保你的應用程式免受 CSRF 攻擊和其他安全漏洞。

發佈留言