作为使我们的 API 和站点更安全的努力的一部分,我正在删除泄露有关站点运行内容的信息的标头。
剥离标题之前的示例:
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687
网络配置:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
全球.asax.cs:
protected void Application_PreSendRequestHeaders() {
Response.Headers.Remove("Server");
Response.Headers.Remove("X-AspNet-Version");
Response.Headers.Remove("X-AspNetMvc-Version");
Response.AddHeader("Strict-Transport-Security", "max-age=300");
Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
}
之后,对站点和 API 的所有调用都会返回更安全的标头,如下所示:
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687
到目前为止,一切都很好。但是,我在 Firebug 中注意到,如果您查看静态内容(例如,loading.gif),它仍然包含服务器标头。
HTTP/1.1 304 Not Modified
Cache-Control: no-cache
Accept-Ranges: bytes
Etag: "a3f2a35bdf45ce1:0"
Server: Microsoft-IIS/8.0
Date: Tue, 25 Jun 2013 18:33:16 GMT
我假设这是由 IIS 以某种方式处理的,但找不到任何地方来删除该标头。我试过添加:
<remove name="Server" />
到 Web.config 中的 httpProtocol/customHeaders 部分,如上所述。我还尝试进入 IIS 管理器的 HTTP 响应标头部分并为服务器标头添加假名称/值对。在这两种情况下,它仍然返回
Server: Microsoft-IIS/8.0
加载任何图像、CSS 或 JS 时。我需要在哪里/什么设置一些东西来解决这个问题?