Server
用法
服务器包含 Server 头部以标识处理请求的软件及可选的版本信息。其值遵循与 User-Agent 请求头类似的产品令牌格式:一个或多个产品名称,每个后面可选地跟随版本号和注释。
Server 中的详细程度因部署而异。暴露具体的软件版本会带来安全风险。攻击者会扫描特定版本的 Web 服务器、框架和操作系统中的已知漏洞。详尽的 Server 头部会简化这种侦察。
注意
在 Server 头部中暴露版本信息会帮助扫描已知漏洞的攻击者。生产环境部署宜将其值限制为通用产品名称,或完全移除该头部。
缓解此风险的常见做法包括:
大多数 Web 服务器都提供配置选项来控制 Server 头部的值。Nginx 使用 server_tokens 指令。Apache 使用 ServerTokens 和 ServerSignature。反向代理和 CDN 通常会用它们自己的标识符覆盖源服务器的值。
product
一个或多个产品令牌,用于标识服务器软件。每个令牌可选地包含以正斜杠分隔的版本号,以及圆括号中的注释。
Server: <product>/<version> (<comment>)
多个产品以空格分隔,按重要程度顺序列出。
示例
一个最小化的响应标识服务器软件,但不暴露版本号。这是生产环境的推荐做法。
Server: nginx
有些服务器会包含版本详情和操作系统信息。这种格式会为基于版本的扫描暴露更多攻击面。
Server: Apache/2.4.57 (Ubuntu)
CDN 和云平台通常会用它们自己的产品名称替换源服务器的值。
Server: cloudflare
自定义或有意含糊的值可以掩盖底层的技术栈。
Server: webserver
配置
在生产环境中抑制或最小化 Server 头部,以减少信息泄露。
nginx:
server_tokens off;
这会将值缩减为不含版本号的 nginx。要完全移除该头部,需要 headers-more 模块:
more_clear_headers Server;
Apache:
ServerTokens Prod
ServerSignature Off
ServerTokens Prod 会将值缩减为不含版本或模块详情的 Apache。ServerSignature Off 会从错误页面中移除服务器信息。
IIS:
通过 URL Rewrite 出站规则移除该头部,或在 applicationHost.config(.NET 8+)中设置 removeServerHeader=“true”。