直到最近我才开始质疑Server
HTTP Response-Header 中字段的用途。
我做了一些研究:
RFC 2616 规定:
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 之类的模块提供版本信息似乎是个坏主意。
- 是否需要此字段...用于任何事情?如果是这样,是什么?
- 在服务器上禁用或更改此字段是否已经是最佳实践/常见的地方?
我认为,从安全角度来看,我们希望向敌人(即:每个人)提供尽可能少的信息,同时仍然允许业务继续进行。这是一篇关于信息战的有趣文章。