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

来源:https://www.cnblogs.com/supersnowyao/archive/2018/01/13/8279652.html
-Advertisement-
Play Games

簡介 那些通過請求(如查詢字元串和表單數據)指定重定向URL的Web程式可能會被篡改,而把用戶重定向到外部的惡意URL。這種篡改就被稱為開發重定向攻擊。 場景分析 假設有一個正規網站http://nerddinner.com/,還有一個惡意網站或釣魚網站http://nerddiner.com/(註 ...


簡介

  那些通過請求(如查詢字元串和表單數據)指定重定向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. 如果登錄鏈接和站點其他頁面不在同一個功能變數名稱,如單點登錄,則需要自己去實現判斷的邏輯。
 
核心代碼

 1        [HttpPost]
 2         public ActionResult LogOn(LogOnModel model, string returnUrl)
 3         {
 4             //Your logon logic here.
 5             FormsAuthentication.SetAuthCookie(model.UserName, false);
 6            //Comment out this code will cause open redirection 
 7             if (!string.IsNullOrEmpty(returnUrl)&& Url.IsLocalUrl(returnUrl))
 8             {
 9                 return Redirect(returnUrl);
10             }
11             return RedirectToAction("Index", "Home");
12         }

 

聯想到XSS

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

   

源碼下載

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

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

 

 文章轉載自:http://www.cnblogs.com/Erik_Xu/p/5497479.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python的字元串格式化有兩種方式:%格式符方式和format方式 ...
  • python3.5模擬登陸要求: 1、三次登陸認證; 2、輸入正確 >歡迎; 3、輸入錯誤 >密碼或賬戶有誤; 4、如果想繼續 >選擇y或Y。 思路: 1、創建賬戶和密碼; 2、用while迴圈,count計數; 3、輸入正確時,跳出迴圈(break); 4、擋count=3時,要重新計數(coun ...
  • ABPZero並沒有手機簡訊發送功能,現在我們來集成一個,為後面註冊、登錄作鋪墊。 阿裡雲簡訊服務 首先需要在阿裡雲開通簡訊服務,連接地址 開通後,在簽名管理中添加一個簽名 在模板管理中添加一個模板,如下圖所示 最後需要使用阿裡雲提供的.NET發送簡訊類庫,下麵可以直接下載我上傳的類庫,也可以去官方 ...
  • 本篇內容雜而簡單,不需要多租戶、不需要多語言、使用MPA(多頁面)、頁面載入速度提升…… 剛登錄系統會看到如下界面,這不是最終想要的效果,以下就一一來修改。 不需要多租戶 AbpZeroTemplateConsts.cs代碼修改如下 文件路徑:D:\abp version\aspnet-zero-3 ...
  • 1.新建一個web頁。 2.添加引用,引入htmlagilitypack。 3.代碼 HtmlWeb類是一個從網路上獲取一個HTML文檔的類,其提供的功能大多是基於完成此需求出發。 HtmlDocument類對應著一個HTML文檔代碼。它提供了創建文檔,裝載文檔,修改文檔等等一系列功能。 ...
  • 簡介 SQL註入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程式,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾用戶輸入的數據,致使非法數據侵入系統。 根據相關技術原理,SQL註入可以分為平臺層註入和代碼層註入。前者由不安全的 ...
  • 一般一個項目開始之前都會有啟動會,需求交底等等,其中會有一個環節,大講特講項目的意義,然後取一個高大上的項目名字,咱這是一個小功能談不上項目,但是名字不能太小氣了。好吧,就叫Trump吧。沒有任何含義,玩嘛! 項目分層結構也要在這裡說一下,這次這個小功能仿照DDD的分層模式,一定記住我說的是仿照。因... ...
  • 簡介 過多發佈的內容相對比較簡單,因此,我只打算把原文中的一些關鍵信息翻譯一下。原文鏈接如下: http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-basic-c ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...