在預設的情況下,利用 ASP.NET MVC 技術製作的網站會在 HTTP 回應標頭(Response Header)中包含您目前使用的 ASP.NET MVC 版本編號,雖然目前也只有一版 ( ASP.NET MVC 1.0 ) 沒什麼好隱藏的,不過若基於資安考量希望能隱藏 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 被定義成 靜態唯讀欄位 ( static + readonly ),以致於不能直接修改這個欄位(Field )的內容,必須利用 System.Reflection 機制才能強迫修改這個欄位的內容,如下程式範例:
typeof(MvcHandler)
.GetField("MvcVersionHeaderName")
.SetValue(MvcHandler.MvcVersionHeaderName, "X-TheWillWillWeb-Version");
以上範例純粹好玩,多學點 Reflection 也是不錯的,抽空研究一下吧。