在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的節點下添加如下內容:

<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頭:

  1. 啟動IIS Manager
  2. 展開Website目錄
  3. 在Website上點擊右鍵并在彈出的菜單中選擇屬性
  4. 選擇HTTP Header標簽,所有IIS響應中包含的自定義的HTTP頭都會在這里顯示,只需要選擇響應的HTTP頭并點擊刪除就可以刪除響應的HTTP頭,如圖:

???? 而在IIS7中移除X-Powered-By HTTP頭的方法是:

  1. 啟動IIS Manager
  2. 展開Website目錄
  3. 選擇你需要修改的站點并雙擊HTTP響應頭部分
  4. 所有的自定義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頭并沒有帶來直接的好處,反而小幅加重了寬帶的負擔,所幸的是我們可以通過配置的方式進行移除

本文轉自左正博客園博客,原文鏈接:http://www.cnblogs.com/soundcode/p/4835675.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279953.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAP Customer Data Cloud(Gigya)的用戶搜索實現

我在Gigya前臺根據email搜索&#xff0c;輸入一個郵箱地址&#xff0c;回車&#xff0c;在Chrome開發者工具里觀察到到后臺的網絡請求&#xff1a; 這是一個post請求&#xff1a; __RequestVerificationToken 請求體&#xff1a; {"query":"SELECT * FROM accou…

C# ComboBox枚舉量綁定的 兩種方法

概述ComboBox綁定枚舉量的方法有很多&#xff0c;今天列舉比較常用的兩種&#xff0c;希望對讀者們一些幫助&#xff01;代碼講解前臺XMAL:<StackPanel><ComboBox Name"EvenType1" SelectedIndex"0" Margin"5"/><ComboBox Name&…

springboot + mybatis + gradle項目構建過程

1.從Spring boot官網根據需求下載腳手架或者到GitHub上去搜索對應的腳手架項目,D_iao ^0^ ? 文件目錄如下&#xff08;此處generatorConfig.xml 和 log4j2.xml文件請忽略&#xff0c;后續會講解&#xff09; 2.使用Mybatis代碼自動構建插件生成代碼 ? gradle 相關配置 // My…

基于間隔推送全量更新數據狀態的設計方法

2019獨角獸企業重金招聘Python工程師標準>>> 假如有個直播間&#xff0c;在數據有更新的時候&#xff0c;能及時反映在客戶端上。通信方式來說&#xff0c;有兩種&#xff1a; 1、拉取模式。 2、推送拉取模式&#xff08;或者純推送&#xff09; 拉取模式&#xff0…

Redis 哈希(Hash)

哈希hash又稱為散列、雜湊等&#xff0c;是將任意長度的輸入通過散列算法變換為固定長度的輸出&#xff0c;最終輸出也就是哈希值。這種轉換是一種壓縮映射。也就是說&#xff0c;散列值的空間通常要遠小于輸入控件&#xff0c;不同的輸入可能會散列成相同的輸出&#xff0c;所…

京東Vue組件庫NutUI 2.0發布:將支持跨平臺!

NutUI 是一套來自京東用戶體驗設計部&#xff08;JDC&#xff09;前端開發部的移動端 Vue 組件庫&#xff0c;NutUI 1.0 版本于 2018 年發布。據不完全統計&#xff0c;目前在京東至少有30多個 web 項目正在使用 NutUI。 經過一段時間緊鑼密鼓的開發&#xff0c;近期&#xff0…

macbook 下載時睡眠_MacBook進入睡眠狀態時如何自動使其靜音

macbook 下載時睡眠You open your MacBook to take notes in class or during a meeting, and your music starts playing. Loudly. Not only did you disrupt everyone, you also revealed your passion for 90’s boy bands to a room full of people who once respected you…

Mac 的mysql5.7沒有配置文件,如何解決only_full_group_by 問題

數據庫版本是5.7.19&#xff0c;在寫語句的時候&#xff0c;只要涉及ORDER BY,就會報錯&#xff0c; ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column postscan.verifyDelayLog.auditor which is not function…

Spring MVC 入門(一)

什么是 Spring MVC 學習某一樣東西之前&#xff0c;我們一定要大致知道這個東西是什么&#xff0c;能干什么&#xff0c;為什么要用它。 Spring MVC 是一個開源平臺&#xff0c;一個基于 Spring 的 MVC 框架&#xff0c;它支持基于 Java 開發 Web 應用程序。MVC 架構很利于開發…

開源網關 Apache APISIX 認證鑒權精細化實戰講解

關注公眾號并添加到“星標?”&#xff0c;防止錯過消息后臺回復【資料包】獲取學習資料GitOps 新手入門到專家進階實戰詳細教程作者錢勇&#xff0c;API7.ai 開發工程師&#xff0c;Apache APISIX Committer在當下云原生越發成熟的環境下&#xff0c;API 網關最核心的功能可以…

python應用POP3、IMAP、SMTP 協議,獲取郵箱驗證碼

&#xff30;&#xff2f;&#xff30;&#xff13;和&#xff29;&#xff2d;&#xff21;&#xff30;是郵件相關的協議&#xff0c;&#xff29;&#xff2d;&#xff21;&#xff30;是比&#xff30;&#xff2f;&#xff30;&#xff13;更高級一點的協議&#xff0c;實…

固件中啟用的虛擬化否_哪些固件或硬件機制可啟用強制關機?

固件中啟用的虛擬化否At one time or another, all of us have had to force our computers to shut down by pushing and holding the power button down until they powered off. Is this mechanism hardware-based, firmware-based, or both? Today’s SuperUser Q&A p…

簡述閉包

閉包 這是我對閉包的一點小理解.有問題請直接指出,在此先謝過! 閉包的含義 封閉隔離的空間,在javascript中,只有函數能夠符合這種特性; 為什么要用閉包呢? 因為在引用外部js文件(如jquery,各種框架)時防止變量重名造成的問題,同時也使代碼更具隱私性; 獲取閉包中數據的方法: …

Confluence 6 配置服務器基礎地址備注

使用不同 URL。如果你配置了不同的基礎 URL 地址或者你站點的訪問者使用了不同的 URL 地址來訪問你的 Confluence 地址&#xff0c;你有很大概率可能會受到錯誤信息。修改上下文地址。如果你修改了基礎 URL 地址的上下文地址&#xff0c;你同時也需要修改下面的配置&#xff1a…

2019第10周知識總結

react 事件綁定 函數寫法 文檔總結 https://react.docschina.org/docs/handling-events.html 1 通過 constroucor綁定 class Toggle extends React.Component {constructor(props) {super(props);this.state {isToggleOn: true};// This binding is necessary to make this wo…

.NET 云原生架構師訓練營(基于 OP Storming 和 Actor 的大型分布式架構二)--學習筆記...

▲ 點擊上方“DotNet NB”關注公眾號回復“1”獲取開發者路線圖學習分享 丨作者 / 鄭 子 銘 這是DotNet NB 公眾號的第202篇原創文章目錄為什么我們用 OrleansDapr VS OrleansActor 模型Orleans 的核心概念結合 OP Storming 的實踐結合 OP Storming 的實踐業務模型設計模型代…

PHP 多維數組轉json對象

PHP 多維數組轉json對象 php 數組轉json對象&#xff0c;可能大家都知道要用json_encode,但是轉換出來的格式多有不同&#xff0c;此處做個小小的記錄&#xff01; 1. 一維數組轉json對象 <?php $arr_1 [one, two, three]; var_dump(json_encode($arr_1)); $arr_2 [0 >…

微軟文本檢索_如何在Microsoft Word中引用其他文檔中的文本

微軟文本檢索You probably have some text that you type often in your Word documents, such as addresses. Instead of retyping this text every time you need it, you can put this common text into one Word document and reference it in other documents–it’ll eve…

Hadoop-Flume-類比吸塵器圖解

2019獨角獸企業重金招聘Python工程師標準>>> 這是我自己理解Hadoop-Flume的方式 轉載于:https://my.oschina.net/u/3697442/blog/1560613

BZOJ4327:[JSOI2012]玄武密碼(SAM)

Description 在美麗的玄武湖畔&#xff0c;雞鳴寺邊&#xff0c;雞籠山前&#xff0c;有一塊富饒而秀美的土地&#xff0c;人們喚作進香河。相傳一日&#xff0c;一縷紫氣從天而至&#xff0c;只一瞬間便消失在了進香河中。老人們說&#xff0c;這是玄武神靈將天書藏匿在此。 很…