在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.mzph.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;这是玄武神灵将天书藏匿在此。 很…