删除 Windows Server IIS 10 和 ASP.NET 中的 HTTP 响应标头

Windows Server IIS喜欢告诉全世界网站在 IIS 上运行。它使用 HTTP 响应中的Server标头执行此操作,如下所示。在这篇文章中,我将向您展示如何在 IIS 中删除响应服务器标头。你不想给黑客太多关于你的服务器的信息,嗯?;-)。

正常的 HTTP 响应标头

微软互联网信息服务

尽管我不是默默无闻的安全爱好者(你是吗?),但安全专家通常建议删除常见的服务器响应标头。攻击者可能会通过查看 Web 服务器返回的响应标头来获得有关您的服务器和网络的大量信息。

因此,建议您至少删除其中一些标头。

但是让我们从正常的 HTTP HEAD 响应的样子开始:

HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-UA-Compatible: IE=Edge,chrome=1
Date: Sun, 06 Jul 2014 10:05:34 GMT
Connection: close

在这里,您注意到IIS在标头中显示其版本信息Server,作为响应:

Server: Microsoft-IIS/8.0

删除 IIS 中的 ETag 标头一样,您可以使用 URL Rewrite Module outboundRule重写和清空IISServer:中的HTTP 响应标头。

希望在 IIS (或更多 HTTP 安全标头)上启用 HTTP Strict-Transport-Security (HSTS )?

使用 outboundRule URL 重写规则删除服务器响应标头

不幸的是,您不能真正删除 Server 标头。但是您可以重写其内容并将其清空。在IIS 7+(IIS 7、8.5、8.0、8.5、IIS 10.0)上,使用重写 outboundRuleServer: 标头响应中删除 Web 服务器版本信息。

您可以使用以下URL 重写出站规则:

<rewrite>    
  <outboundRules rewriteBeforeCache="true">
    <rule name="Remove Server header">
      <match serverVariable="RESPONSE_Server" pattern=".+" />
      <action type="Rewrite" value="" />
    </rule>
  </outboundRules>
</rewrite>

outboundRule 所做的是:它Server:在输出响应流中查找标头(或 serverVariable),并用空字符串(无)重写该值。

最终结果是一个空的Server: 响应标题行:

HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Server:
X-UA-Compatible: IE=Edge,chrome=1
Date: Sun, 06 Jul 2014 10:06:08 GMT
Connection: close

您现在已经成功地Server从 HTTP 标头中删除了版本响应!

这是特定于网站的规则。如果要为所有应用程序创建规则,则必须在服务器级别创建规则。此外,某些应用程序,尤其是第三方应用程序,可能需要并依赖于 Server 标头。然后,您可能需要为这些应用程序删除此规则。

删除 IIS 中的 ETags HTTP 响应标头

如何在 IIS 上启用 HTTP 严格传输安全 (HSTS)

用您自己的服务器信息重写“服务器:Microsoft-IIS/8.0”——只是为了好玩

重写响应头的有趣之处在于您可以显示自己的信息字符串。例如,如果您在 Rewrite 操作中提供一个值,则会显示该消息:

<action type="Rewrite" 
  value="Saotn Server Software systems, LTD." />
HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Server: Saotn Server Software systems, LTD.
X-UA-Compatible: IE=Edge,chrome=1
Date: Sun, 06 Jul 2014 11:19:16 GMT
Connection: close

这不是很有趣,现在是吗?:)

将 .htaccess 转换为 web.config

如何使用 PowerShell 从 Windows Server 中删除 IIS

使用 web.config customHeaders 删除 IIS 中的 ASP.NET X-Powered-By 标头

默认情况下, IIS通过放置X-Powered-By标头来告诉世界它由ASP.NET提供支持:

HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Server:
X-Powered-By: ASP.NET
X-UA-Compatible: IE=Edge,chrome=1
Date: Sun, 06 Jul 2014 10:07:37 GMT
Connection: close

可以使用位于web.config节点中的 customHeaders 设置删除此响应标头<system.webServer>

<httpProtocol>
  <customHeaders>
    <remove name="X-Powered-By" />
  </customHeaders>
</httpProtocol>

现在,X-Powered-By标头已从响应标头输出中删除

HTTP/1.1 200 OK
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Server:
X-UA-Compatible: IE=Edge,chrome=1
Date: Sun, 06 Jul 2014 10:10:02 GMT
Connection: close

了解有关各种HTTP 安全标头的更多信息。

X-AspNet-Version 标头

X-AspNet-VersionHTTP Header 向全世界广播正在使用的ASP.NET版本。<system.web>在应用程序的 web.config 文件中的节点内添加以下内容:

<httpRuntime
  enableVersionHeader="false" />

IIS 10.0 中的 removeServerHeader requestFiltering

在 IIS 10.0 (Windows Server 2016/2019) 中,您可以通过在system.webServer节点中配置requestFiltering来移除Server标头:web.config

<security>
  <requestFiltering removeServerHeader ="true" />
</security>

或者在 IIS 管理器的配置编辑器中:

在 IIS 配置管理器 requestFiltering 节点中将 removeServerHeader 设置为 True。

这样您就不必摆弄复杂的出站重写规则。要删除 ASP.NET 的X-Powered-By标头,您仍然需要customHeaders上面提到的部分。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值