如何通过HTACCESS移除IIS中ServerVariables的SERVER_SOFTWARE
SERVER_SOFTWARE移除操作说明(针对IIS 8.5 + Helicon ISAPI_Rewrite 3.1环境)
Helicon ISAPI_Rewrite 3.1的.htaccess规则无法直接移除IIS ServerVariables集合中的SERVER_SOFTWARE项。该变量是IIS核心在请求管线最早期注入的,ISAPI类第三方组件的执行时机晚于变量生成节点,且默认没有修改IIS核心服务器变量的权限。你之前配置不生效的核心原因有两点:
Header unset SOFTWARE指令完全写错了操作对象:该指令用于修改HTTP响应头,你要操作的响应头名称是Server而非SOFTWARE,且这类指令仅能修改输出到客户端的响应内容,触碰不到IIS内部的ServerVariables集合。- 单独添加
RESPONSE_Server变量到允许列表不生效,是因为你没有配置对应的变量替换规则,仅放开权限没有执行实际的清空/替换逻辑,同时Helicon ISAPI_Rewrite本身没有权限修改IIS核心级别的服务器变量。
方案1:驱动层彻底移除(满足PCI合规要求,最稳定)
该方案从Windows HTTP.sys内核层面禁用Server头生成,会同步清除ServerVariables集合中的SERVER_SOFTWARE项,不需要依赖任何重写组件,适配Windows Server 2012 R2 + IIS 8.5环境:
- 以管理员身份打开注册表编辑器,定位到路径:
HKLM\SYSTEM\CurrentControlSet\Services\HTTP\Parameters - 新建DWORD(32位)值,命名为
DisableServerHeader,将数值数据设置为1,基数选择十六进制 - 重启操作系统(该配置是HTTP.sys驱动级参数,仅重启IIS不生效)
- 重启完成后校验:在站点代码中打印ServerVariables集合,
SERVER_SOFTWARE项已被移除,响应头中也不会出现IIS版本标识。
方案2:IIS原生URL Rewrite方案(无需重启服务器)
如果不想修改注册表,可以用微软官方的URL Rewrite 2.1模块实现,不要用第三方Helicon组件操作:
- 安装微软官方IIS URL Rewrite 2.1模块,安装完成后执行
iisreset重启IIS - 打开目标站点的IIS功能视图,进入「URL重写」模块,点击右侧操作栏的「查看服务器变量」,添加允许操作的变量
RESPONSE_Server - 回到规则列表,新增「修改服务器变量」类型的规则,匹配内容为任意路径,设置服务器变量
RESPONSE_Server的值为空字符串,勾选「替换现有值」 - 规则保存后执行
iisreset,即可清空响应头Server字段,同时ServerVariables集合中的对应值会被置空,满足合规扫描要求。
方案3:仅用现有Helicon ISAPI_Rewrite配置(不满足PCI合规要求)
如果你暂时不想调整现有环境,只能通过.htaccess清除客户端可见的响应头Server字段,无法删除ServerVariables集合内的SERVER_SOFTWARE项,过不了合规校验,配置方法为在站点根目录.htaccess中添加如下规则:
Header unset Server Header always unset Server
规则保存后重启站点即可生效,此时客户端抓包看不到Server响应头,但服务端代码读取ServerVariables集合时依然能拿到Microsoft-IIS/8.5的值。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

