The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

ASP.NET MVC 開發心得分享 (10):隱藏 MVC 版本編號

在預設的情況下,利用 ASP.NET MVC 技術製作的網站會在 HTTP 回應標頭(Response Header)中包含您目前使用的 ASP.NET MVC 版本編號,雖然目前也只有一版 ( ASP.NET MVC 1.0 ) 沒什麼好隱藏的,不過若基於資安考量希望能隱藏 ASP.NET MVC 送出的版本編號時,就可以利用本篇講的這個小技巧。

在預設的情況下,利用 ASP.NET MVC 技術製作的網站會在 HTTP Response Header 中包含您目前使用的 ASP.NET MVC 版本編號

由於 ASP.NET 3.5 提供的 Routing Module 在網址結構的設定十分彈性,也因此 ASP.NET MVC 在規劃網址結構時甚至可以讓使用者完全看不出來這是用 ASP.NET MVC 開發的網站,這時若隱藏 ASP.NET MVC 的版本編號也能讓多隱藏一些採用技術的細節。

這個技巧十分簡單,只要在 Global.asax.cs 檔案的 Application_Start() 事件方法中加上一行即可:

        protected void Application_Start()
        {
            // 加上此行可隱藏 ASP.NET MVC 版本資訊在 HTTP Header 中出現
            MvcHandler.DisableMvcResponseHeader = true;

            RegisterRoutes(RouteTable.Routes);
        }

就這麼簡單。 ^_^

不過光是這樣實在不夠好玩,我們還可以自訂 HTTP 回應標頭的名稱,你想改成什麼都行,如下圖示。

MvcHandler.MvcVersionHeaderName

不過 MvcHandler.MvcVersionHeaderName 被定義成 靜態唯讀欄位 ( static + readonly ),以致於不能直接修改這個欄位(Field )的內容,必須利用 System.Reflection 機制才能強迫修改這個欄位的內容,如下程式範例:

typeof(MvcHandler)
.GetField("MvcVersionHeaderName")
.SetValue(MvcHandler.MvcVersionHeaderName, "X-TheWillWillWeb-Version");

以上範例純粹好玩,多學點 Reflection 也是不錯的,抽空研究一下吧。