我正在使用 Varnish,但不太确定是否也应该删除Server: nginx
HTTP 标头。为什么有人需要知道我正在使用 NGINX?从响应中删除此 HTTP 标头可以吗?还是在某个地方需要它?从安全角度来看,这样做可能更好?
答案1
RFC 7231 提到服务器标头:
原始服务器可以在其响应中生成服务器字段。
MAY 的解释是RFC 2119:
- 可以 这个词,或者形容词“可选”表示某项是真正可选的。一个供应商可能选择包含该项,因为特定市场需要它,或者因为供应商认为它可以增强产品,而另一个供应商可能省略同一项。不包含特定选项的实现必须准备好与包含该选项的另一个实现进行互操作,尽管功能可能会减少。同样,包含特定选项的实现必须准备好与不包含该选项的另一个实现进行互操作(当然,该选项提供的功能除外)。
因此,限制或删除服务器响应标头是完全没问题的。当然,最好意识到这样做可能会放弃什么。为此,请返回 RFC 7231:
“服务器”标头字段包含有关源服务器处理请求所用软件的信息,客户端通常使用这些信息来帮助确定所报告的互操作性问题的范围、解决或定制请求以避免特定服务器限制,以及用于分析服务器或操作系统的使用情况。源服务器可以在其响应中生成服务器字段。
Server = product *( RWS ( product / comment ) )
服务器字段值由一个或多个产品标识符组成,每个产品标识符后跟零个或多个注释([RFC7230] 第 3.2 节),它们共同标识源服务器软件及其重要子产品。按照惯例,产品标识符按其对识别源服务器软件的重要性降序排列。每个产品标识符由名称和可选版本组成,如第 5.5.3 节中定义。
例子:
Server: CERN/3.0 libwww/2.17
源服务器不应生成包含不必要的细粒度细节的服务器字段,并且应限制第三方添加子产品。过长和详细的服务器字段值会增加响应延迟,并可能泄露内部实现细节,这可能会让攻击者(稍微)更容易找到和利用已知的安全漏洞。
虽然在实践中,攻击者实际上并不会检查 Server: 标头。他们只是尝试他们知道的每个安全漏洞,不管您的服务器是否显示存在漏洞。删除 Server: 标头是一种隐秘的安全这是一种几乎完全无效的行动。但如果这能让你感觉更好,或者你的老板或审计员要求你这样做,那就去做吧。只是不要指望它能显著改善你的安全状况。
例如,nmap
即使配置为Server
根本不发送标头,或者标头内容完全是伪造的,也可以相当准确地识别 Web 服务器。使用 亲自尝试一下nmap -sV -P0 -p 80,443 <IP address>
。
答案2
HTTPServer
标头仅用于一个目的 - 识别。它不是正常运行网站所必需的,并且删除它不会造成任何影响。
它暴露了内部服务器基础设施,从而泄露了可能对潜在入侵有用的安全信息。
通过 HTTP 标头了解您的 Web 服务器软件后Server
,潜在入侵者可以搜索您的 Web 服务器的公开已知漏洞。然后,他们可以将此信息与他们可能获得的任何其他信息(例如通过扫描)结合使用 - 构建适当的攻击媒介。
因此,您可能希望Server
完全删除标题,例如在 nginx 中删除它。
答案3
如果你有 ”server_tokens 关闭“在您的配置中(似乎您确实这样做了,因为只有“nginx”,而不是“nginx/1.13.11”),那么保持现状就可以了。如果您有一个易受攻击的版本,问题可能会出现,坏人可能会使用此信息来利用该漏洞,但为此您的 nginx 应该是公开可访问的。简而言之,使用“server_tokens off;”并且不要为所有 IP 打开 nginx 端口,只为 Varnish 打开,这样您就安全了。