ASP.在NET MVC中如何隐藏Response Header的服务器?
2527 ワード
本来はお客様のWikiに掲載されているので、日本語で書きます.
-----------------------------------------------------------------------------
在Response Header中,服务器的版本被用字体表示,但在版本信息中受到了现有的脆弱性的攻击的可能性很高,不安全.
ASP.NET的情况下,同样加入Response Header的ASP.把NET版本藏在WebRole的Web.虽然可以在config文件上配置,但服务器简单地是Web.我不能用config文件配置.
我试着在网上搜索的方法.在WebRole的"Global.asax.cs"档案中,追加了以下コード.
如果用正确的URL来进行访问的话,Response Header没有服务器的版本.好像成功了!!!
但是,如果比如下所述的那样存在的解释的话,http://domain/test.text,404艾勒画面被显示,Response Header又显示了服务器的版本.
那么,MVC的情况下,服务器接受Request,首先检查了在Routes设定的URL是否一致的,如果是正确的话,Application_PreSendRequestHeaders()实行.因此,如果不是正确的URL的话,Application_因为没有实行PreSendRequestHeaders,所以不能从海达删除Server的版本.
因此,在Routes上标志前,必须从赫达删除Server的版本.我试着追加以下コード.「Web.config」
「CustomHeaderModule.cs」
这样的话,即使URL不正确也会删除Server的版本.
-----------------------------------------------------------------------------
在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的版本.