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

解决VAPT问题:禁用ASP.NET Core Web API的TRACE请求

禁用ASP.NET Core API中的HTTP TRACE方法

你之前修改appSettings.json日志级别的操作完全找错了方向——日志的Trace级别和HTTP协议的TRACE请求方法是完全无关的两个概念,前者控制日志输出的详细程度,后者是HTTP标准定义的请求方法之一,修改日志配置根本无法禁用TRACE请求。

下面是几种可靠的禁用方式:

方式1:自定义中间件拦截TRACE请求

在项目的入口文件(.NET 6+为Program.cs,.NET 5及更早为Startup.cs)中添加一个优先级靠前的中间件,直接拦截所有TRACE请求并返回405(方法不允许)状态码:

.NET 6+ 示例(Program.cs)

var builder = WebApplication.CreateBuilder(args);

// 注册你的服务(如Controllers、Swagger等)
builder.Services.AddControllers();

var app = builder.Build();

// 拦截TRACE请求的中间件,放在最前面确保优先执行
app.Use(async (context, next) =>
{
    if (string.Equals(context.Request.Method, "TRACE", StringComparison.OrdinalIgnoreCase))
    {
        context.Response.StatusCode = StatusCodes.Status405MethodNotAllowed;
        return;
    }
    await next.Invoke();
});

// 其他中间件配置(路由、授权等)
app.UseRouting();
app.UseAuthorization();
app.MapControllers();

app.Run();

方式2:通过路由约束限制允许的HTTP方法

你可以在全局路由或单个Action上明确指定允许的HTTP方法,排除TRACE:

单个Action示例

[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
    // 仅允许GET、POST、HEAD、OPTIONS方法访问
    [HttpGet]
    [HttpPost]
    [HttpHead]
    [HttpOptions]
    public IActionResult GetData()
    {
        return Ok("Sample Response");
    }
}

全局路由约束示例(.NET 6+)

app.MapControllers()
   .RequireMethod("GET", "POST", "HEAD", "OPTIONS");

方式3:IIS部署场景下直接配置

如果你的API部署在IIS服务器上,可通过IIS管理器直接禁用TRACE方法:

  • 打开IIS管理器,选中目标站点
  • 进入请求筛选功能
  • 切换到HTTP谓词标签页
  • 点击拒绝谓词,输入TRACE并添加
  • 保存配置后重启站点

验证配置

完成上述任一配置后,你可以用curl或Postman发送TRACE请求,正常情况下会收到405 Method Not Allowed响应,且响应头的Allow字段中将不再包含TRACE。

内容的提问来源于stack exchange,提问作者Amol Gunjal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:12:43