Web安全相關(三):開放重定向(Open Redirection)


簡介

  那些通過請求(如查詢字符串和表單數據)指定重定向URL的Web程序可能會被篡改,而把用戶重定向到外部的惡意URL。這種篡改就被稱為開發重定向攻擊。
 

場景分析

 

  假設有一個正規網站http://nerddinner.com/,還有一個惡意網站或釣魚網站http://nerddiner.com/(注意:這里少了個n)。

  一天,小白收到了別人發的鏈接:http://nerddinner.com/Account/LogOn?returnUrl=http://nerddiner.com。

  1. 打開鏈接后進入了登錄界面,小白輸入了自己的帳號名密碼進行登錄。

  2. 登錄成功后重定向到了惡意網站。

  3. 惡意網站是一個仿造正規網站的登錄頁面,並在上面提示用戶名或密碼錯誤。

  4. 小白按照提示重新輸入了帳號密碼信息。

  5. 惡意網站保存了客戶的用戶名密碼,然后重定向會正規網站。

  6. 小白繼續平時正常的操作。

  

防止開放重定向

  防止開發重定向只需要判斷重定向的鏈接是本地的鏈接或者是合法的鏈接即可。

  1. 如果登錄鏈接和站點其他頁面都在同一個域名,在ASP.MVC中可以用Url.IsLocalUrl(string url)來判斷。

  2. 如果登錄鏈接和站點其他頁面不在同一個域名,如單點登錄,則需要自己去實現判斷的邏輯。

 

核心代碼

        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            //Your logon logic here.

            FormsAuthentication.SetAuthCookie(model.UserName, false);

            if (!string.IsNullOrEmpty(returnUrl)
                && Url.IsLocalUrl(returnUrl) //Comment out this code will cause open redirection 
                )
            {
                return Redirect(returnUrl);
            }

            return RedirectToAction("Index", "Home");
        }

 

聯想到XSS

  1. 惡意用戶在正規網站下掛了跳轉到惡意網站的腳本。
  2. 普通用戶訪問到含惡意腳本的頁面會跳轉到惡意網站。
  3. 惡意網站是一個仿造正規網站的登錄頁面,並在上面提示需要重新登錄。
  4. 小白按照提示重新輸入了帳號密碼信息。
  5. 惡意網站保存了客戶的用戶名密碼,然后重定向會正規網站。
 
  注:這種方式每次訪問含惡意腳本的頁面都會跳轉到惡意網站(提示重新登錄),而開放重定向只會提示用戶名密碼錯誤一次,相對而言,開放重定向的無感知效果要好一點。
 

源碼下載

  如果大家想嘗試開放重定向的效果,可以去下載代碼,把判斷本鏈接的語句Url.IsLocalUrl(returnUrl)注釋掉,然后在登錄頁面加上想要跳轉到的頁面,如http://xxx.com/Account/LogOn?ReturnUrl=http://www.baidu.com。

  下載地址:https://github.com/ErikXu/OpenRedirection


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM