如何通过错误域名访问Web应用?我的公共应用遭非自有域名请求的原因
关于错误域名请求你的ASP.NET应用的问题分析
你猜的没错,这类请求确实是客户端通过自定义DNS解析(或者修改本地hosts文件)把example.com指向了你的服务器IP导致的。下面一步步拆解你的问题:
一、为什么会出现这类请求?
当客户端把example.com的DNS解析指向你的IP后,发起请求时HTTP头里的Host字段会被设为example.com。如果你的IIS站点满足以下任一条件,就会处理这个请求:
- 站点绑定的是**“所有未分配”的IP地址**,且没有指定具体的主机名(也就是允许任意Host头的请求)
- 站点绑定了通配符主机名,或者请求被路由到了IIS默认站点
这时候你的ASP.NET应用的Request.Url会根据请求的Host头生成,所以日志里会显示example.com,而不是你的真实域名。
二、对方这么做的可能目的
这类请求大概率是扫描或者测试行为,常见的目的包括:
- 测试主机头限制:检查你的服务器是否接受任意Host头的请求,这是很多后续攻击的前置步骤
- 绕过防护机制:如果你的WAF或者防火墙只针对你的真实域名做了防护,对方用其他域名请求可能绕过这些限制
- 钓鱼预测试:想验证如果把知名域名(比如
example.com)指向你的IP,你的应用会不会返回内容,方便后续制作钓鱼页面 - 随机扫描:互联网上的扫描工具会随机用常见域名测试开放服务器,只是刚好扫到了你
三、为什么IIS日志没记录这些请求?
这通常是日志配置或者站点路由的问题:
- IIS日志字段未开启
cs-host:默认的IIS日志可能不记录请求的Host头,你需要在IIS管理器的日志字段设置里勾选Host(对应日志里的cs-host字段),这样才能看到请求的Host信息 - 请求被路由到了默认站点:如果你的站点绑定了特定主机名,而IIS接收到Host头不匹配的请求时,会自动路由到默认站点,你如果只查看自己站点的日志,自然看不到这些记录
- 日志筛选规则限制:检查下IIS日志的筛选规则,有没有过滤掉某些状态码或者请求类型
四、如何通过错误域名访问你的Web应用?
本质都是让请求的Host头指向错误域名,同时请求IP指向你的服务器,常见方式有:
- 修改本地hosts文件:在客户端的
hosts文件(Windows是C:\Windows\System32\drivers\etc\hosts,Linux是/etc/hosts)里添加一行你的服务器IP example.com,之后在浏览器访问example.com就会跳转到你的服务器 - 使用自定义DNS服务器:在私有DNS服务器上添加一条A记录,把
example.com指向你的IP,所有使用这个DNS的客户端访问example.com都会到你的服务器 - 手动指定Host头发送请求:用curl、Postman这类工具,直接设置请求的Host头为
example.com,同时请求你的服务器IP,比如:curl -H "Host: example.com" http://你的服务器IP/
五、建议的防护措施
为了避免这类情况,你可以做这些配置:
- 严格配置IIS站点绑定:只绑定你自己的合法域名,不要使用“所有未分配”且无主机名的绑定,这样只有Host头匹配的请求才会被你的站点处理
- 添加Host头验证:在ASP.NET的
Application_BeginRequest里添加逻辑,检查Request.Url.Host是否在你的合法域名列表里,如果不是就返回403 Forbidden,比如:void Application_BeginRequest() { var allowedHosts = new List<string> { "your-real-domain.com", "www.your-real-domain.com" }; if (!allowedHosts.Contains(Request.Url.Host)) { Response.StatusCode = 403; Response.End(); return; } // 原来的日志逻辑 Logger.Debug("Application_BeginRequest"); Logger.Info(Request.HttpMethod + " " + Request.Url + " requested from " + Request.UserHostAddress); } - 开启IIS日志的Host字段:方便后续排查这类异常请求
- 防火墙/WAF层面限制:在防火墙或者WAF里添加Host头白名单,只允许合法域名的请求进入
内容的提问来源于stack exchange,提问作者Rico




