HTTP“服务器”响应头字段是做什么用的?

信息安全 http
2021-08-28 20:41:54

直到最近我才开始质疑ServerHTTP Response-Header 中字段的用途。

我做了一些研究:

RFC 2616 规定:

14.38 服务器

Server response-header 字段包含有关源服务器用于处理请求的软件的信息。该字段可以包含多个产品令牌(第 3.8 节)和标识服务器和任何重要子产品的注释。产品令牌按其识别应用程序的重要性顺序列出。

   Server         = "Server" ":" 1*( product | comment )

例子:

   Server: CERN/3.0 libwww/2.17

如果响应是通过代理转发的,代理应用程序不能修改服务器响应头。相反,它应该包含一个 Via 字段(如第 14.45 节所述)。

  Note: Revealing the specific software version of the server might
  allow the server machine to become more vulnerable to attacks
  against software that is known to contain security holes. Server
  implementors are encouraged to make this field a configurable

然而,这并没有提到这个领域的目的。这对我来说似乎是信息泄露这些服务器字符串会泄露大量信息,这对于任何试图对服务器进行指纹识别的人来说都是非常有用的。自动扫描工具将快速识别未打补丁或易受攻击的服务器。让我的 Web 服务器为自己和 OpenSSL 之类的模块提供版本信息似乎是个坏主意。

  • 是否需要此字段...用于任何事情?如果是这样,是什么?
  • 在服务器上禁用或更改此字段是否已经是最佳实践/常见的地方?

我认为,从安全角度来看,我们希望向敌人(即:每个人)提供尽可能少的信息,同时仍然允许业务继续进行。是一篇关于信息战的有趣文章。

2个回答

应该从 HTTP 响应中删除服务器信息,并且泄漏此数据是不安全的默认设置。这不是主要的安全风险,甚至不是中等的安全风险——但我只是向我的对手宣布这些细节让我感到不舒服。准确的版本号会在何时以及多久修补一次生产系统——即使版本是最新的。知道补丁周期的对手意味着他们知道你什么时候最弱。

HTTP Host 标头可能对Netcraft Web Server Survey最有用但就 HTTP 而言,这无关紧要。这就是为什么我们有标准,以便不同供应商编写的客户端和服务器可以一起工作。

它可用于您想使用的任何用途。过去我发现它对逆向工程合规性问题很有帮助;例如,IIS 以多种方式破坏了 HTTP/1.1 ( RFC 2616 ),但大多数在性能方面都对用户有利,并且受到大多数浏览器的支持。实际上大多数当前的浏览器不再遵守 RFC 2616 中的规则(现在 13 岁)。

过去,我遇到过 HTTP 服务器代码和配置中的错误问题。了解远程端正在运行什么对诊断和解决这些问题有很大帮助。

是的,在 Security 101 中,您被告知隐藏此类信息可以提高安全性,IME 的好处是有限的:

  • 脚本小子/自动攻击不会费心查看您正在运行的软件 - 他们只是开枪并希望最好。

  • 任何有能力的人都应该能够确定服务器类型(尽管我没有尝试过使用 HTTP 服务器,但几年前,我正在对 SMTP 服务器进行调查——平均使用 2.1 个命令,我可以找到输入并猜测来自 12 个不同供应商的 MTA 的主要版本号)。