转IIS 屏蔽返回的Header中的 IIS版本信息

最近一个客户通过专业工具扫描网站,发现了几个低等级的安全问题,其中有csp安全设置缺乏,http请求表头返回敏感信息未处理,跨站攻击防范未处理等,要求我们予以修复。

说实话,这类事情,国内很多人都没听说过,因为没人重视,也可能是有些人刻意为之的缘故吧,否则那些广告联盟的饭就不好吃了。。。。

废话少说,现在就把处理的过程简单记录下来:

首先是在网站配置文件里添加如下节点,用于csp设置,下面的例子设置为最严防范

  1. <system.web>

  2. ...

  3. <httpRuntime enableVersionHeader="false" />

  4. <system.webServer>

  5. ...

  6. <httpProtocol>

  7. <customHeaders>

  8. <add name="X-Frame-Options" value="SAMEORIGIN" />

  9. <add name="Content-Security-Policy" value="default-src 'self'; style-src 'self' 'unsafe-inline'; media-src *; script-src 'self' 'unsafe-eval' 'unsafe-inline'; img-src 'self'"/>

  10. </customHeaders>

  11. </httpProtocol>

  12. </system.webServer>

  13. </system.web>

然后是禁止iis返回服务器敏感信息,网上查了N种方法,都不行,要么是过时了,要么是没有效果,要么是应用范围比较窄。。。

最后同事在github上发现了一个开源的项目,可以轻松解决这个问题,现在也贴出来:

StripHeaders 项目入口

下载StripHeaders安装文件(.msi)

我们只要下载msi文件点击安装,然后重启iis就可以了。

做完之后,再打开网站,就会看到,所有返回的请求头里,server信息以及X-Powered-By、X-AspNet-Version、X-AspNetMvc-Version等都消失了,并且csp也正确反馈出来了。

注意:如果没有效果,或是页面报错了,可能是系统用户权限不足,需要手动注册一下这个StripHeaders。

可以用管理员权限打开命令行窗口,执行如下命令:

C:\Windows\System32\inetsrv\appcmd.exe install module /name:StripHeadersModule /image:%windir%\system32\inetsrv\stripheaders.dll /add:true /lock:true

然后再重启IIS服务,就可以了。