什么是開放重定向?
Andrew2020-10-12 10:56:50
開放重定向是一種Web應用程序安全性問題,攻擊者可以利用它來利用您的企業信譽來提高網絡釣魚攻擊的效率。如果允許開放重定向,則攻擊者可以發送網絡釣魚電子郵件,該電子郵件包含與您的域名的鏈接,受害者將被從您的Web服務器重定向到攻擊者的站點。
請注意,2013年OWASP Top 10列表(A10未驗證的重定向和轉發中將開放重定向作為漏洞包括在內。
什么是重定向
當網站或Web應用程序更改客戶端中訪問的URL時,將發生重定向(通常是外部–內部重定向通常稱為forwards)。從后端有幾種方法可以做到這一點。通常,重定向是通過將特定的HTTP標頭發送到客戶端來進行的,但是您也可以使用JavaScript代碼創建重定向。
什么是開放重定向
當客戶端提供重定向的目標并且未對其進行過濾或驗證時,將存在一個開放的重定向漏洞。以下是安全重定向和不安全重定向的一些示例:
- 如果合法網站將客戶端重定向到固定URL,則這是安全的重定向。
- 如果合法網站根據用戶提供的參數安全地構建重定向URL,則它是安全的重定向。
- 如果合法網站基于用戶提供的參數構造了重定向URL,但沒有充分驗證/過濾輸入,則它是不安全的重定向(攻擊者可能會操縱輸入)。
- 如果合法網站允許用戶指定目標重定向URL,則它是不安全的重定向(開放重定向)。
通常,使用動態重定向(基于客戶端的數據)的開發人員必須將此類數據視為不受信任的輸入。否則,攻擊者會將瀏覽器重定向到惡意站點,并使用您的域名來欺騙受害者。
例如,如果您的域是example.com,則攻擊者可能創建以下URL:
https://example.com/redirect.php?url=http://attacker.com
然后,攻擊者可以發送此URL作為網絡釣魚嘗試的一部分,以將受害者重定向到惡意網站Attacker.com。攻擊者希望開始時example.com的外觀可信任,并使它們陷入網絡釣魚詐騙。
開放重定向的示例
以下簡單的PHP代碼創建一個開放的重定向:
$redirect = $_GET['url']; header("Location: " . $redirect);
這是一個開放的重定向漏洞,因為攻擊者可能在GET請求的url參數值中提供惡意網站URL,然后此目標URL將作為Location標頭發送,將客戶端重定向到惡意網頁。
開放式重定向漏洞的后果
如果您有一個開放的重定向漏洞,則它可能導致許多其他攻擊:
- 網絡釣魚:使用開放重定向的最明顯方法是將受害者從原始站點轉移到看起來相同的站點,竊取用戶憑據,然后返回漏洞站點,就像什么也沒發生一樣。
- 跨站點腳本(XSS):如果重定向允許使用data:或javascript:協議,并且客戶端在重定向中支持此類協議,則攻擊者可以執行XSS攻擊。
- 服務器端請求偽造(SSRF):開放重定向可用于逃避SSRF篩選器。
- 內容安全策略繞過:如果使用CSP防御XSS,并且列入白名單的域之一具有開放重定向,則可以使用此漏洞繞過CSP。
- CRLF注入:如果重定向參數允許換行,攻擊者可能會嘗試執行響應頭拆分。
如何防止打開重定向
防止開放重定向漏洞的最安全方法是在Web應用程序中不使用任何重定向。如果這不可能,則可以嘗試以下方法:
- 使用固定目標頁面列表。將其完整的URL存儲在數據庫表中,并使用標識符作為請求參數而不是URL本身來調用它們。例如,存儲example2.com在數據庫表與標識符42,然后使用下面的呼叫重定向到example2.com:example.com /重定向。php **?redir_id = 42。
- 如果您不能使用固定的重定向目標列表,請過濾不受信任的輸入(如果可以,請使用白名單,而不是黑名單)。確保檢查部分字符串,例如,http:// *example.com *.evil.com是有效的URL。此外,禁止使用除HTTP和HTTPS之外的所有協議。另請注意,盡管您盡了最大努力,攻擊者還是有可能找到繞過您的過濾器的方法。
Andrew
暫無描述