如何在 ASP.NET 中阻止 Http 方法

How to Block Http Methods in ASP.NET

提问人:Suzaku 提问时间:12/16/2022 最后编辑:Suzaku 更新时间:12/16/2022 访问量:522

问:

作为安全修复的一部分,我们要求在 ASPNET Core Web 应用程序中禁用除 POST、GET 和 Head 之外的 HTTP 方法。我们如何在核心 API 中禁用 HTTP OPTIONS 方法 ASP.Net? 允许 3 种方法,即 POST、GET 和 Head。 如何阻止我在中间件(如DELETE,TRACE,PATCH等)中没有使用的所有其他方法。 需要返回错误代码 405 = Method Not Allowed。目前,它抛出错误 500,即内部服务器错误

我现在的代码.

 app.Use(async (context, next) =>
            {
                if (context.Request.Method=="TRACE")
                {
                    context.Response.StatusCode = 405;
                    return; 
                }
                await next.Invoke();
            });

如何在 ASP.NET 中阻止 Http 方法

asp.net asp.net-core asp.net-mvc-3 http-headers http-verbs

评论

0赞 davidfowl 12/16/2022
似乎您想要一个允许列表而不是拒绝列表。只接受 POST、GET 和 HEAD 的请求。你所拥有的看起来不错。

答:

2赞 Ruikai Feng 12/16/2022 #1

您可以尝试以下操作:

app.MapWhen(x => x.Request.Method == "somemethod",
                y => y.Use(async(context,next)=>
                {
                    context.Response.StatusCode = 405;
                    await context.Response.WriteAsync("Method Not Allowed");
                }
            ));

结果:

enter image description here