应安全要求,需要移除 IIS 下的 Server、X-AspNet-Version、X-AspNetMvc-Version、X-Powered-By 等信息
X-Powered-By 比较简单,在相应站点下的 web.config 中增加配置:
<system.webServer> <httpProtocol> <customHeaders> <remove name="X-Powered-By"/> </customHeaders> </httpProtocol> </system.webServer>
Server、X-AspNet-Version、X-AspNetMvc-Version 比较复杂
1、通过自己编写 IHttpModule 实现移除:
public class IISHeaderRemoveModule : IHttpModule { public void Init(HttpApplication context) { context.PreSendRequestHeaders += OnPreSendRequestHeaders; } public void Dispose() { } void OnPreSendRequestHeaders(object sender, System.EventArgs e) { HttpContext.Current.Response.Headers.Remove("Server"); HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); HttpContext.Current.Response.Headers.Remove("X-AspNetMvc-Version"); // 此项需要在 customHeaders 中删除 // HttpContext.Current.Response.Headers.Remove("X-Powered-By"); } }
在 web.config 中增加配置即可:
<system.webServer> <modules> <add name="IISHeaderRemoveModule" type="Namespace.IISHeaderRemoveModule,AssemblyName"/> </modules> </system.webServer>
但是不能实现全局配置,需要在每个站点下的 bin 目录中,增加上代码生成的 dll,可以考虑将 dll 增加到全局 GAC 中
若需要全局配置使用,应在 C:WindowsSystem32inetsrvconfigapplicationHost.config 文件中配置,并将 dll 放置在某个公共文件夹中(如:C:Windowsassembly)但未实现,参考链接:
https://stackoverflow.com/questions/1856696/how-do-i-manually-copy-assemblies-into-the-gac
https://docs.microsoft.com/en-us/dotnet/standard/assembly/sign-strong-nam
2、或者可以直接使用网上已经实现的开源项目:
https://github.com/Dionach/StripHeaders
下载安装即可,但是好像只支持 Windows Server 2008 到 Windows Server 2016,即 IIS 7.0 - IIS 8.5