ASP.NET MVCでResponse Headerのサーバーバージョンをどうやって隠しますか?
本来是发布在客户的Wiki上的,所以用日语写。
-----------------------------------------------------------------------------
Response Headerの中に、サーバーのバージョンがデフォルトで表示されていますが、バージョン情報にて既知の脆弱性を突いた攻撃を受ける可能性が高くて、不安全です。
ASP.NETの場合、同じくResponse Headerにデフォルトで入っているASP.NETバージョンを隠すには、WebRoleのWeb.configファイルで配置していいですが、サーバーバージョンがそう簡単にWeb.configファイルで配置して済めないです。
ネットで検索された方法を試します。
WebRoleの「Global.asax.cs」ファイルで、以下のコードを追加します。
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
Response.Headers.Remove("X-AspNet-Version");
Response.Headers.Remove("X-AspNetMvc-Version");
}
正しいのURLでアクセスしてみれば、Response Headerにサーバーのバージョンがなくなりました。
成功らしいです!!!
但し、例えば下記のような存在しないリソースをアクセスすると、
http://domain/test.text
404エラー画面が表示され、Response Headerにサーバーのバージョンがまた表示されています。
それは、MVCの場合、サーバーがRequestを受けて、まずRoutesで設定しているURLに一致するかどうかをチェックして、正しいであれば、Application_PreSendRequestHeaders() を実行します。なので、正しいではないURLの場合、Application_PreSendRequestHeadersを実行しないため、ヘッダからServerのバージョンを削除しないです。
そのため、URLをRoutesにマッピングする前に、ヘッダからServerのバージョンを削除しければなりません。
以下のコードを追加してみます。
「Web.config」
<system.webServer>
<modules>
<add name="CustomHeaderModule"
type="Test.Module.CustomHeaderModule" />
</modules>
</system.webServer>
「CustomHeaderModule.cs」
namespace Test.Module
{
public class CustomHeaderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += OnPreSendRequestHeaders;
} public void Dispose() { } void OnPreSendRequestHeaders(object sender, EventArgs e)
{
HttpContext.Current.Response.Headers.Remove("Server");
}
}
}
こうすれば、URLが正しくなくても、Serverのバージョンが削除されます。
ASP.NET MVCでResponse Headerのサーバーバージョンをどうやって隠しますか?的更多相关文章
- spring mvc Response header content type
Xml代码 <bean class ="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAd ...
- 白话ASP.NET MVC之二:Controller激活系统的概览
前文简介:我们抽象类路由规则的对象,RouteBase是路由对象的抽象基类,ASP.NET 的路由系统中有唯一一个从RouteBase继承的路由对象,那就是Route类型了.我们注册了路由对象Rout ...
- 白话ASP.NET MVC之三:Controller是如何解析出来的
我们在上一篇文章中介绍Controller激活系统中所涉及到的一些类型,比如有关Controller类型的相关定义类型就包括了IController类型,IAsyncController类型,Cont ...
- Asp.Net MVC中Controller、Action、View是如何激活调用的
上篇我们介绍了MVC的路由,知道在注册路由的时候会创建一个MvcHandler将其和Url规则一起放入到了RouteCollection中,之后请求通过UrlRoutingModule,根据当前的UR ...
- 你真的熟悉ASP.NET MVC的整个生命周期吗?
一.介绍 我们做开发的,尤其是做微软技术栈的,有一个方向是跳不过去的,那就是MVC开发.我相信大家,做ASP.NET MVC 开发有的有很长时间,当然,也有刚进入这个行业的.无论如何,如果有人问你,你 ...
- ASP.NET MVC中移除冗余Response Header
本文主要介绍如何优化ASP.NET MVC使用IIS时Response Header中的不必要的信息 默认的,创建一个ASP.NET MVC项目,会在Response Header中包含一些敏感的信息 ...
- ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
继续进行 ASP.NET MVC 3 网站优化工作,使用 Google Page 检测发现提示 You should Specify Vary: Accept-Encoding header,The ...
- Response.End()在Webform和ASP.NET MVC下的表现差异
前几天在博问中看到一个问题--Response.End()后,是否停止执行?MVC与WebForm不一致.看到LZ的描述后,虽然奇怪于为何用Response.End()而不用return方式去控制流程 ...
- [小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证
在一些 Web 系统中,身份验证是依靠硬件证书进行的:在电脑上插入 USB 证书,浏览器插件读取证书的相关信息,然后在发送 HTTP 登录请求时顺便在 Header 字段附加上身份信息.服务器端处理这 ...
随机推荐
- CCF 模拟A 无脑大循环
http://115.28.138.223:81/view.page?opid=1 第一题用一组STL函数查找即可 #include<iostream> #include<cstdi ...
- jenkins Auth fail验证失败
重新设置密码
- 获取编辑框字符串,传入Intent
private EditText etData; etData = (EditText) findViewById(R.id.etData); Intent i = new Intent(MainAc ...
- ubuntu14.04 server 安装vmware worktation 12
0) Do the basic system installation of Ubuntu 14.04 LTS (Server or Desktop) 1) wget the installer wg ...
- 【GoLang】GoLang for 中有多个循环变量怎么处理?
代码示例: sum := , ; i <= && j <= ; i, j = i+, j- { t.Log("i: ", i) t.Log(" ...
- list<T>与ObservableCollection<T>
list<T>与ObservableCollection<T>的用法基本上是一样的.区别: list<T>: 当T继承于INotifyPropertyChanged ...
- DELPHI XE5开发WEB服务器及安卓手机客户端
Xe5开发web服务端和手机客户端 ------------------------------------- Delphi xe5作为最新开发利器,就类似如当年的DELPHI,功能强大,快发速度快, ...
- FFmpeg-20160506-snapshot-bin
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 F ...
- 移动端设页面根目录HTML的字体大小
@media (max-width: 359px){ html { font-size: 62.5%; }}@media (min-width: 360px) and (max-width: 374p ...
- Java for LeetCode 226 Invert Binary Tree
Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia: This problem wa ...