ASP.在NET MVC中如何隐藏Response Header的服务器?

2527 ワード

本来はお客様の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的版本.
因此,在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的版本.