基于.Net 6.0的SSO认证小应用,交付后进行web安全扫描,提示“检测到URL存在 http host 头攻击漏洞”,验证过程:
Chrome浏览器安装ModHeader插件,启用插件后,在ModHeader中添加Host abcdexxx.com,此时刷新目标网址,如果能正常显示或试图跳转至abcdexxx.com ,则证明漏洞存在。修复后应提示400 host invalid,无法正常访问。
ModHeader插件下载modheader_idgpnmonknjnojddfkpgkljpfnnfcklj
以下是修复过程:
✅ Host Header Attack 是什么?
攻击者通过伪造 Host: 请求头,使应用产生错误行为,例如:
-
伪造生成带恶意域名的回调 URL
-
绕过某些基于 Host 判断的逻辑
-
触发开放重定向等漏洞
IIS 默认不会严格验证 Host,所以 ASP.NET Core 应用必须自己限制可信 Host。
🚀 ASP.NET Core 官方推荐做法:使用 Host Filtering Middleware
ASP.NET Core 自带 Microsoft.AspNetCore.HostFiltering 中间件,可以 限制允许访问的 Host 列表。
1)在 appsettings.json 添加允许的 Host
⚠️ 必须列出所有可能访问的 Host
例如:
-
不带 www
-
带 www
-
内网 IP(如有需要)
-
HTTPS 端口如使用 5001 这种自定义端口要标明:
yourdomain.com:5001
2)在 Program.cs / Startup.cs 启用 Host Filtering
.NET 6+(Program.cs)
若使用 Startup.cs
✋ 中间件会做什么?
当请求头中 Host: 不在 AllowedHosts 内:
-
ASP.NET Core 返回 400 Bad Request
-
阻止进一步处理请求
→ 有效修补 Host Header Attack
🔒 IIS 额外加固(可选)
1)限制操作系统级别的 Host 绑定(强烈推荐)
在 IIS 网站绑定中:
-
只填写正确的 Host Name(如 www.yourdomain.com)
-
不要使用
*:*或空的 Host
例如:
| Type | Host Name | Port |
|---|---|---|
| https | www.yourdomain.com | 443 |
| https | yourdomain.com | 443 |
这样 IIS 只接受你允许的 Host。
🛡 额外防护:阻止 X-Forwarded-Host 注入(若使用反向代理)
如果你在前面使用 Nginx / Apache / Load Balancer
请开启 Host Forwarding Strict 模式: