如何通过IIS URL Rewrite规则防护本地主机的Host头漏洞?
IIS Host头漏洞精准防护解决方案
问题核心
仅在Home、Mysite站点配置Rewrite规则无法覆盖所有站点(漏洞扫描仍能检测到),全局配置又会导致正常用户无法访问。根源在于Default Web Site和SharePoint Web Services这两个绑定localhost/端口的站点未配置针对性防护,而全局规则会误拦截合法站点的访问请求。
针对本地服务站点的规则配置
这两个站点仅对内(localhost)提供服务,规则需只允许合法本地Host头,拦截所有外部恶意Host:
1. 规则逻辑
- 允许的合法Host:
localhost、127.0.0.1、服务器本地局域网IP(如192.168.x.x,无局域网访问需求可省略) - 非法Host直接返回403禁止访问(这类本地服务无需重定向到主域名,拦截更直接)
2. 图形界面配置步骤(每个站点单独操作)
- 打开对应站点的URL Rewrite模块,点击「添加规则」→ 空白规则
- 规则名称:Block Invalid Local Host Headers
- 匹配URL:
- 匹配类型:
Regular Expression - 模式:
.*(匹配所有URL) - 勾选「忽略大小写」
- 匹配类型:
- 条件:
- 输入:
{HTTP_HOST} - 检查方式:
Does Not Match the Pattern - 模式:
^(localhost|127\.0\.0\.1|192\.168\.1\.100)$(替换为你的服务器本地IP,不需要则删除对应部分) - 勾选「忽略大小写」
- 输入:
- 操作:
- 操作类型:
Custom Response - 状态代码:
403 - 原因短语:
Invalid Host Header - 响应内容:
Access denied due to invalid Host header.
- 操作类型:
3. 直接修改web.config配置(更高效)
编辑Default Web Site和SharePoint Web Services的web.config文件,在<system.webServer>节点下添加以下规则:
<rewrite> <rules> <rule name="Block Invalid Local Host Headers" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^(localhost|127\.0\.0\.1|192\.168\.1\.100)$" negate="true" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Invalid Host Header" statusDescription="Access denied due to invalid Host header." /> </rule> </rules> </rewrite>
(替换192.168.1.100为你的服务器本地IP,无需求可删除该部分)
为什么不使用全局规则?
全局规则会作用于所有站点,包括Home和Mysite,可能误拦截这两个站点的合法Host(如site1.domain.com),导致用户无法访问。而针对每个站点单独配置规则,能实现精准防护:
- Home、Mysite:保留原有规则,将非法Host重定向到主域名
- Default Web Site、SharePoint Web Services:仅允许本地合法Host,拦截所有外部恶意请求
验证方法
- 漏洞扫描工具重新检测,确认漏洞消失
- 本地测试:用
localhost/127.0.0.1访问两个本地服务站点,确保正常访问 - 恶意Host测试:用curl或其他工具构造非本地Host头请求,确认返回403
内容的提问来源于stack exchange,提问作者SrvrAdmin
相关产品推荐
相关产品推荐

