You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 21:33:21