在ASP.Net和IIS中刪除不必要的HTTP響應頭
引入
每次當瀏覽器向Web伺服器發起一個請求的時,都會伴隨著一些HTTP頭的傳送.而這些HTTP頭是用於給Web伺服器提供一些額外資訊以便於處理請求。比如說吧。如果瀏覽器支援壓縮功能,則瀏覽器會傳送Accept-Encoding HTTP頭,這樣一來伺服器便知道瀏覽器可以使用哪種壓縮演算法。還有任何在上一次傳輸中服務端設定的cookies也會通過Cookies HTTP頭來回傳到伺服器,瀏覽器還會傳送用於讓服務端知道客戶使用的是何種瀏覽器(IE,火狐,Safari等),瀏覽器版本,作業系統以及其他相關資訊的User-Agent HTTP頭。
同樣,Web伺服器也會在傳送回客戶端時伴隨著一些HTTP頭,這些HTTP頭可以通知瀏覽器如何生成相應的內容和快取內容的時間,Web伺服器也會傳送自身的識別資訊,這很像User-Agent HTTP頭,這些頭資訊包括Web伺服器的版本以及當前使用的ASP.Net的版本.
在某些情況下一些HTTP頭是必須的,然而Web伺服器的自身識別頭資訊卻並不是那麼必要,這些資訊會讓每次的傳輸多出100位元組左右。好吧,我同意100位元組單獨來說並不是一個很大的數字,但在傳輸成千上萬次時,這些資訊也不可小覷。此外,提供伺服器資訊也會導致安全問題,有些攻擊者很瞭解特定的伺服器以及特定的Asp.net版本所包含的漏洞,他們會掃描大量伺服器然後選擇特定的伺服器(譯者按:比如IIS和Asp.net 2.0.50727)來作為他們的攻擊目標。
而這篇文章就來講如何刪除這些不必要的HTTP響應頭.
觀察Web伺服器的HTTP響應頭
為了看到從伺服器和瀏覽器之間通訊的HTTP頭,你需要在瀏覽器安裝一些外掛.比如說Fiddler就是一個微軟釋出的免費的用於記錄HTTP日誌的軟體。而這些HTTP日誌會包含HTTP頭,在這篇文章中我會假設讀者已經熟悉了這個軟體,假如你並不熟悉這個軟體的話,我推薦閱讀Troubleshooting Website Problems by Examining the HTTP Traffic,這篇文章裡詳細講述瞭如何安裝&使用Fiddler.
使用Fiddler,找一個使用IIS和Asp.net的Web伺服器,比如微軟asp.net官方網站,通常在預設情況下,HTTP響應頭會包含3個Web伺服器的自身識別頭.
- 伺服器-指定是何種伺服器以及伺服器版本,比如:
- Server:Microsoft-IIS/6/0
- Server:Microsoft-IIS/7.0
- X-Powered-By,用於表示這個站點是“Powered by asp.net”
- X-Powered-By:ASP.NET
- X-AspNet-Version,用於指定當前的Asp.net版本,注意就算你使用Asp.net 3.5但在X-AspNet-Version可能會報告使用的是2.0:
- X-AspNet-Version:2.0.50727
- X-AspNet-Version:1.1.4322
- X-AspNetMvc,指定當前版本的Asp.net MVC(如果使用Asp.net MVC的話):
- X-AspNetMvc-Version:1.0
這些伺服器自身識別資訊在大多數情況下並不會被瀏覽器使用,因此可以被安全的移除,這篇文章的餘下部分將會講述如何移除這些HTTP頭
移除X-AspNet-Version HTTP頭
X-AspNet-Version HTTP頭會告訴全世界我們伺服器當前使用的Asp.net版本,去除這個HTTP頭簡直是小菜一碟,只需要在Web.Config的<system.web>節點下新增如下內容:
<httpRuntime enableVersionHeader="false" />
是不是非常輕鬆愉快?
移除X-AspNetMvc-Version HTTP頭
X-AspNetMvc-Version HTTP頭會自動被Asp.net MVC框架加入進去,如果你沒有使用Asp.net MVC,這個HTTP頭不會存在.移除這個HTTP頭的方式是在Global.asax的Application_Start事件中將MvcHandler類的DisableMvcResponseHeader屬性設定為True
// C# MvcHandler.DisableMvcResponseHeader = true; ' VB MvcHandler.DisableMvcResponseHeader = True
移除X-Powered-By HTTP頭
X-Powered-By HTTP頭並不只是在Asp.net中存在,其他服務端語言,比如PHP,也會包含這個HTTP頭,當Asp.net被安裝時,這個頭會作為一個定製的HTTP頭插入IIS中,因此,我們需要將這個HTTP頭從IIS的配置中刪除,如果你的網站是在共享的環境下並且沒有使用IIS7並使用管道模式,你不得不為此聯絡你的空間提供商來幫你移除。(如果你的網站是在IIS7環境下,那你可以通過HTTP Module的形式通過程式設計來移除)
在IIS6中移除X-Powered-By HTTP頭:
- 啟動IIS Manager
- 展開Website目錄
- 在Website上點選右鍵並在彈出的選單中選擇屬性
- 選擇HTTP Header標籤,所有IIS響應中包含的自定義的HTTP頭都會在這裡顯示,只需要選擇響應的HTTP頭並點選刪除就可以刪除響應的HTTP頭,如圖:
而在IIS7中移除X-Powered-By HTTP頭的方法是:
- 啟動IIS Manager
- 展開Website目錄
- 選擇你需要修改的站點並雙擊HTTP響應頭部分
- 所有的自定義HTTP頭全在這裡了,刪除相應的頭僅需要點選右邊的”Remove”連結:
移除Server HTTP頭
這個HTTP頭會自動附加在當前的IIS相應中,刪除這個HTTP頭可以使用微軟免費的UrlScan工具.
如果你使用的是IIS7 整合管道模式,你也可以使用HTTP Module來使用程式設計的方式來去除它。Stefan Grobner's的部落格中IIS 7 - How To Send A Custom "Server" HTTP Header這篇文章詳細講述瞭如何修改Server HTTP標頭.簡單的說,你需要建立一個HTTP Module併為PreSendRequestHeaders事件建立事件處理程式,在這個事件處理程式中的程式碼會類似:
HttpContext.Current.Response.Headers.Remove("Server");
Howard von Rooijen的文章更深層次的論述瞭如何在IIS7和整合管道模式中移除Server Http頭,更多細節,請檢視:Cloaking your ASP.NET MVC Web Application on IIS 7
小結
移除伺服器自身識別響應頭會有如下好處:
- 這降低了伺服器和瀏覽器之間所需傳輸的資料量
- 使黑客攻擊伺服器變得更加困難,從而使伺服器更加強壯
如上的幾個HTTP頭並沒有帶來直接的好處,反而小幅加重了寬頻的負擔,所幸的是我們可以通過配置的方式進行移除
由請喊我大龍哥最後編輯於:3年前
內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。
相關文章
- HTTP請求頭和響應頭詳解HTTP
- http請求頭與響應頭的應用HTTP
- 刪除不必要的核心模組
- HTTP請求頭與響應頭HTTP
- 關於常用的http請求頭以及響應頭詳解HTTP
- HTTP請求格式和HTTP響應格式HTTP
- ASP.NET Core中的響應壓縮ASP.NET
- 在Linux中,如何建立、刪除和修改檔案?Linux
- HTTP 響應HTTP
- 在 Linux 中如何刪除檔案中的空行Linux
- 在 CentOS 8 中刪除舊的 Linux 核心CentOSLinux
- Wireshark的HTTP請求包和響應包如何對應HTTP
- Java在PDF中刪除註釋Java
- HTTP 請求響應頭部欄位裡 ETAG 的用法舉例HTTP
- 在 Git 中怎樣克隆、修改、新增和刪除檔案?Git
- 將 ASP.NET Core 應用釋出到 IISASP.NET
- Angular 裡 HTTP 請求和響應結構的攔截器(interceptors)在 SAP Spartacus 中的應用AngularHTTP
- 在LVM中恢復已刪除的物理卷LVM
- HTTP的請求與響應HTTP
- 在Linux中,如何建立、移動和刪除檔案和資料夾?Linux
- Asp.net MVC中的Http管道事件為什麼要以Application_開頭?ASP.NETMVCHTTP事件APP
- Sanic Response HTTP 響應HTTP
- 使用HTTP響應頭X-Frame-Options防止網頁被FrameHTTP網頁
- HTTP協議-HTTP響應報文HTTP協議
- 選中取消push和splice刪除
- IoC在ASP.NET Web API中的應用ASP.NETWebAPI
- 在LVM中恢復已刪除的邏輯卷LVM
- 在 CentOS 8 中刪除舊的 Linux 系統核心CentOSLinux
- linux的刪除檔案命令和強制刪除命令Linux
- HTTP 請求與響應HTTP
- Http請求與響應HTTP
- HTTP 響應狀態碼HTTP
- boost http響應讀取HTTP
- win10如何刪除智慧新聞_win10刪除智慧頭條的方法Win10
- 關於http和一次完整的前後端響應HTTP後端
- 關於 IIS 上執行 ASP.NET Core 站點的“HTTP 錯誤 500.19”錯誤ASP.NETHTTP
- 6.12php對資料庫的刪除和批量刪除PHP資料庫
- win10使用者頭像怎麼刪除_win10賬戶頭像刪除方法Win10