如何消除Azure应用服务中特定请求触发的详细错误日志?
拦截Azure App Service中针对未识别域名的恶意探测请求
这类请求本质是攻击者直接通过服务器IP发起请求,手动将Host头设为不存在的<site>域名。Azure App Service默认会将所有带Host头的请求转发到你的应用,导致生成冗余的详细404错误日志;而本地调试时Kestrel服务器的默认规则会直接拒绝非法Host头,所以表现不同。
以下是几种直接有效的解决方法:
1. 自定义中间件拦截非法Host头
在ASP.NET Core中间件管道最前端添加Host头校验逻辑,直接拦截非法请求,避免进入后续路由流程产生日志。
实现中间件代码
public class ValidateHostMiddleware { private readonly RequestDelegate _next; private readonly IReadOnlyList<string> _validHosts; public ValidateHostMiddleware(RequestDelegate next, IConfiguration configuration) { _next = next; // 从配置文件读取合法域名列表 _validHosts = configuration.GetSection("ValidHosts").Get<List<string>>() ?? new List<string>(); // 自动添加Azure默认的.azurewebsites.net域名 var azureDefaultHost = Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME"); if (!string.IsNullOrEmpty(azureDefaultHost) && !_validHosts.Contains(azureDefaultHost)) { _validHosts.Add(azureDefaultHost); } } public async Task InvokeAsync(HttpContext context) { var requestHost = context.Request.Host.Host; // 忽略端口,只校验域名部分 var isHostValid = _validHosts.Any(validHost => string.Equals(validHost, requestHost, StringComparison.OrdinalIgnoreCase)); if (!isHostValid) { context.Response.StatusCode = StatusCodes.Status400BadRequest; await context.Response.WriteAsync("Invalid Host Header"); return; } await _next(context); } } // 扩展方法简化注册 public static class ValidateHostMiddlewareExtensions { public static IApplicationBuilder UseValidateHost(this IApplicationBuilder builder) { return builder.UseMiddleware<ValidateHostMiddleware>(); } }
注册中间件(Program.cs)
务必把这个中间件放在所有路由、静态文件等中间件之前,确保优先处理:
var builder = WebApplication.CreateBuilder(args); // 其他服务注册逻辑... var app = builder.Build(); // 优先校验Host头 app.UseValidateHost(); // 后续中间件(静态文件、路由、授权等)... app.Run();
配置合法域名(appsettings.json)
把你的所有自定义域名填进去:
{ "ValidHosts": [ "your-custom-domain1.com", "your-custom-domain2.com" ] }
2. Azure层面强化防护
- 强制HTTPS:在App Service的「自定义域名」面板开启HTTPS强制,减少HTTP端口(80)的探测请求。
- 访问限制:如果能定位到固定恶意IP段,可在「网络」->「访问限制」中添加拒绝规则,但该方法对动态变化的恶意IP效果有限。
- 前置CDN/Front Door:将流量通过Azure CDN或Front Door转发,在边缘节点就校验Host头,只放行合法域名的请求,从根源阻断恶意流量。
内容的提问来源于stack exchange,提问作者Peter Kron
相关产品推荐
相关产品推荐

