解决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
相关产品推荐
相关产品推荐

