
掌握ChatGPT插件與自定義GPT
當毫無戒心的用戶點擊此鏈接時,瀏覽器會將其重定向到合法網站。但是,如果服務器未驗證 URL 是否正確重定向,則會將用戶重定向到惡意網站。此外,由于 URL 包含合法域名,攻擊者可以輕松欺騙用戶惡意網站的合法性。
一旦用戶進入攻擊者的網站,攻擊者就可以偽裝網站并要求輸入憑證。最后,攻擊者可以在存儲憑證后將用戶重定向回合法網站。因此,攻擊者成功獲取憑證,而受害者卻毫不知情。
您可能已經聽到團隊中的安全工程師主張解雇您,因為您甚至考慮了如此糟糕的實施。可以理解的是,您可能認為這種實施在當今時代肯定不存在。然而,您會對大量此類實施不佳的解決方案感到驚訝。
這并不是說這就是開放重定向漏洞的全部。遠非如此。盡管開放重定向攻擊的復雜程度較低,但它們通常作為網絡釣魚和跨站點腳本攻擊套件的一部分存在。這些攻擊協同工作,形成一種更復雜、多步驟的攻擊,以阻止更具彈性和更強大的平臺。
開放重定向攻擊有以下幾種:
基于標頭的開放重定向攻擊直接利用用戶輸入的易受攻擊的代碼。與上述示例非常相似,這些攻擊在很大程度上取決于平臺中重定向背后的邏輯和社會工程。此外,這種攻擊不需要 JavaScript 即可奏效,因此它特別邪惡。
僅當執行 JavaScript 作為重定向功能的一部分時,才會觸發基于 JavaScript 的開放重定向。因此,這種形式的未經驗證的重定向不適用于服務器端功能。?
為了防止開放重定向漏洞,您必須重新考慮依賴于重定向的解決方案的方法。
解決開放重定向問題最成功的辦法就是取消重定向。當然,對于某些人來說,這可能不是一個可行的解決方案,我們將提供一些替代方案,但我們確實想強調的是,即使您認為需要重定向,但實際上可能并不需要。有更現代、更安全、更可靠的方法可以提供相同的功能,而不會讓自己面臨這種漏洞。
但是,如果您必須進行重定向,請考慮限制用戶可用的可能的重定向目的地。但是,再次強調,在 HTML 元素中使用固定選項可以大大減輕這些漏洞的影響。
此外,解析和識別潛在的惡意輸入可以清除服務可能收到的許多攻擊。例如,如果用戶不應該離開您的域并且表現出這樣做的意圖,這已經是一個危險信號。在 .NET 中,我們可以使用“LocalRedirect”助手實現這樣的解決方案。
public IActionResult SomeAction(string redirectUrl)
{
return LocalRedirect(redirectUrl);
}
只需將助手添加到提供的輸入即可。
如果指定了非本地 URL,則“LocalRedirect”將引發異常。否則,其行為與重定向方法相同。
此外,通過使用“Url.IsLocalUrl”方法,我們可以檢查提供的 URL 是否是本地的,并在需要處理此類行為時改變應用程序的行為。
private IActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction(nameof(HomeController.Index), "Home");
}
}
“URL.IsLocalUrl”方法可防止用戶無意中重定向到惡意網站。此外,您可以記錄在您預期本地 URL 的情況下提供非本地 URL 時提供的 URL 詳細信息。記錄重定向 URL 可能有助于您診斷重定向攻擊。
除了這些策略之外,您還可以實施防火墻、重定向通知等平臺解決方案。
重要的是要意識到,執行滲透測試、安全審計和保持庫更新被認為是良好做法,也是確保平臺安全的最佳方式。但是,完成所有這些工作可能既耗時又復雜。這就是為什么我們鼓勵您考慮使用 StackHawk。
正如你所見,解決這些漏洞并不復雜。只是需要時間。
在所有可能的方面進行漏洞緩解可能非常困難,有時與其他潛在漏洞相比,不值得花費時間進行開發。這就是為什么我們鼓勵您為您的團隊考慮強大且經過測試的解決方案。
我們希望本文能幫助您為用戶和客戶提供更好的解決方案。
文章來源:.NET Open Redirect Guide: Examples and Prevention