在ASP.Net和IIS中删除不必要的HTTP响应头
引入
?? 每次當(dāng)瀏覽器向Web服務(wù)器發(fā)起一個(gè)請(qǐng)求的時(shí),都會(huì)伴隨著一些HTTP頭的發(fā)送.而這些HTTP頭是用于給Web服務(wù)器提供一些額外信息以便于處理請(qǐng)求。比如說(shuō)吧。如果瀏覽器支持壓縮功能,則瀏覽器會(huì)發(fā)送Accept-Encoding?HTTP頭,這樣一來(lái)服務(wù)器便知道瀏覽器可以使用哪種壓縮算法。還有任何在上一次傳輸中服務(wù)端設(shè)置的cookies也會(huì)通過(guò)Cookies?HTTP頭來(lái)回傳到服務(wù)器,瀏覽器還會(huì)發(fā)送用于讓服務(wù)端知道客戶使用的是何種瀏覽器(IE,火狐,Safari等),瀏覽器版本,操作系統(tǒng)以及其他相關(guān)信息的User-Agent?HTTP頭。
??? 同樣,Web服務(wù)器也會(huì)在發(fā)送回客戶端時(shí)伴隨著一些HTTP頭,這些HTTP頭可以通知瀏覽器如何生成相應(yīng)的內(nèi)容和緩存內(nèi)容的時(shí)間,Web服務(wù)器也會(huì)發(fā)送自身的識(shí)別信息,這很像User-Agent?HTTP頭,這些頭信息包括Web服務(wù)器的版本以及當(dāng)前使用的ASP.Net的版本.
??? 在某些情況下一些HTTP頭是必須的,然而Web服務(wù)器的自身識(shí)別頭信息卻并不是那么必要,這些信息會(huì)讓每次的傳輸多出100字節(jié)左右。好吧,我同意100字節(jié)單獨(dú)來(lái)說(shuō)并不是一個(gè)很大的數(shù)字,但在傳輸成千上萬(wàn)次時(shí),這些信息也不可小覷。此外,提供服務(wù)器信息也會(huì)導(dǎo)致安全問(wèn)題,有些攻擊者很了解特定的服務(wù)器以及特定的Asp.net版本所包含的漏洞,他們會(huì)掃描大量服務(wù)器然后選擇特定的服務(wù)器(譯者按:比如IIS和Asp.net 2.0.50727)來(lái)作為他們的攻擊目標(biāo)。
???? 而這篇文章就來(lái)講如何刪除這些不必要的HTTP響應(yīng)頭.
觀察Web服務(wù)器的HTTP響應(yīng)頭
???? 為了看到從服務(wù)器和瀏覽器之間通信的HTTP頭,你需要在瀏覽器安裝一些插件.比如說(shuō)Fiddler就是一個(gè)微軟發(fā)布的免費(fèi)的用于記錄HTTP日志的軟件。而這些HTTP日志會(huì)包含HTTP頭,在這篇文章中我會(huì)假設(shè)讀者已經(jīng)熟悉了這個(gè)軟件,假如你并不熟悉這個(gè)軟件的話,我推薦閱讀Troubleshooting Website Problems by Examining the HTTP Traffic,這篇文章里詳細(xì)講述了如何安裝&使用Fiddler.
????? 使用Fiddler,找一個(gè)使用IIS和Asp.net的Web服務(wù)器,比如微軟asp.net官方網(wǎng)站,通常在默認(rèn)情況下,HTTP響應(yīng)頭會(huì)包含3個(gè)Web服務(wù)器的自身識(shí)別頭.
- 服務(wù)器-指定是何種服務(wù)器以及服務(wù)器版本,比如:
- Server:Microsoft-IIS/6/0
- Server:Microsoft-IIS/7.0
- X-Powered-By,用于表示這個(gè)站點(diǎn)是“Powered by asp.net”
- X-Powered-By:ASP.NET
- X-AspNet-Version,用于指定當(dāng)前的Asp.net版本,注意就算你使用Asp.net 3.5但在X-AspNet-Version可能會(huì)報(bào)告使用的是2.0:
- X-AspNet-Version:2.0.50727
- X-AspNet-Version:1.1.4322
- X-AspNetMvc,指定當(dāng)前版本的Asp.net MVC(如果使用Asp.net MVC的話):
- X-AspNetMvc-Version:1.0
?????? 這些服務(wù)器自身識(shí)別信息在大多數(shù)情況下并不會(huì)被瀏覽器使用,因此可以被安全的移除,這篇文章的余下部分將會(huì)講述如何移除這些HTTP頭
移除X-AspNet-Version HTTP頭
???? X-AspNet-Version HTTP頭會(huì)告訴全世界我們服務(wù)器當(dāng)前使用的Asp.net版本,去除這個(gè)HTTP頭簡(jiǎn)直是小菜一碟,只需要在Web.Config的節(jié)點(diǎn)下添加如下內(nèi)容:
<httpRuntime enableVersionHeader="false" />???? 是不是非常輕松愉快?
移除X-AspNetMvc-Version HTTP頭
???? X-AspNetMvc-Version HTTP頭會(huì)自動(dòng)被Asp.net MVC框架加入進(jìn)去,如果你沒(méi)有使用Asp.net MVC,這個(gè)HTTP頭不會(huì)存在.移除這個(gè)HTTP頭的方式是在Global.asax的Application_Start事件中將MvcHandler類(lèi)的DisableMvcResponseHeader屬性設(shè)置為T(mén)rue
// C# MvcHandler.DisableMvcResponseHeader = true;' VB MvcHandler.DisableMvcResponseHeader = True移除X-Powered-By HTTP頭
????? X-Powered-By HTTP頭并不只是在Asp.net中存在,其他服務(wù)端語(yǔ)言,比如PHP,也會(huì)包含這個(gè)HTTP頭,當(dāng)Asp.net被安裝時(shí),這個(gè)頭會(huì)作為一個(gè)定制的HTTP頭插入IIS中,因此,我們需要將這個(gè)HTTP頭從IIS的配置中刪除,如果你的網(wǎng)站是在共享的環(huán)境下并且沒(méi)有使用IIS7并使用管道模式,你不得不為此聯(lián)系你的空間提供商來(lái)幫你移除。(如果你的網(wǎng)站是在IIS7環(huán)境下,那你可以通過(guò)HTTP Module的形式通過(guò)編程來(lái)移除)
???? 在IIS6中移除X-Powered-By HTTP頭:
???? 而在IIS7中移除X-Powered-By HTTP頭的方法是:
移除Server HTTP頭
?? 這個(gè)HTTP頭會(huì)自動(dòng)附加在當(dāng)前的IIS相應(yīng)中,刪除這個(gè)HTTP頭可以使用微軟免費(fèi)的UrlScan工具.
?? 如果你使用的是IIS7 整合管道模式,你也可以使用HTTP Module來(lái)使用編程的方式來(lái)去除它。Stefan Grobner's的博客中IIS 7 - How To Send A Custom "Server" HTTP Header這篇文章詳細(xì)講述了如何修改Server HTTP標(biāo)頭.簡(jiǎn)單的說(shuō),你需要?jiǎng)?chuàng)建一個(gè)HTTP Module并為PreSendRequestHeaders事件創(chuàng)建事件處理程序,在這個(gè)事件處理程序中的代碼會(huì)類(lèi)似:
HttpContext.Current.Response.Headers.Remove("Server");?? Howard von Rooijen的文章更深層次的論述了如何在IIS7和整合管道模式中移除Server Http頭,更多細(xì)節(jié),請(qǐng)查看:Cloaking your ASP.NET MVC Web Application on IIS 7
小結(jié)
??? 移除服務(wù)器自身識(shí)別響應(yīng)頭會(huì)有如下好處:
- 這降低了服務(wù)器和瀏覽器之間所需傳輸?shù)臄?shù)據(jù)量
- 使黑客攻擊服務(wù)器變得更加困難,從而使服務(wù)器更加強(qiáng)壯
??? 如上的幾個(gè)HTTP頭并沒(méi)有帶來(lái)直接的好處,反而小幅加重了寬帶的負(fù)擔(dān),所幸的是我們可以通過(guò)配置的方式進(jìn)行移除
總結(jié)
以上是生活随笔為你收集整理的在ASP.Net和IIS中删除不必要的HTTP响应头的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么样快速学习AngularJS?
- 下一篇: 美团极速支付怎么关闭