我应该在配置标志后面放置UseForwardedHeaders()吗?

时间:2018-05-07 20:06:15

标签: asp.net-core asp.net-core-2.0

为了支持在Linux上使用反向代理(在本例中为nginx)运行我的ASP.NET Core应用程序,我不得不添加以下代码片段:

// Forward headers in order to be able to operate behind a reverse proxy
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

// The above does not appear to be enough to get the right redirect URI result when
// logging in with OpenID Connect. This code snippet from
// https://github.com/aspnet/Docs/issues/2384 fixed it.
app.Use((context, next) =>
{
    if (context.Request.Headers.TryGetValue(XForwardedPathBase, out StringValues pathBase))
    {
        context.Request.PathBase = new PathString(pathBase);
    }

    if (context.Request.Headers.TryGetValue(XForwardedProto, out StringValues proto))
    {
        context.Request.Protocol = proto;
    }

    return next();
});

我无法找到任何关于我是否可以默认启用此功能的明确建议,或者我是否应该将其置于某些显式配置标志之后?

在我看来,如果在没有使用反向代理的情况下添加这些标题,这可能会产生奇怪的影响?我无法想到它可以被利用的方式,但也许我错过了一些东西。

那么,除了非常小的性能改进之外,为这个特定的配置引入标志是否有优势呢?

1 个答案:

答案 0 :(得分:1)

不,不要在没有反向代理的情况下留下这个,这很危险。客户端可以使用它来提供错误值(欺骗)并欺骗您检查这些值的任何应用程序逻辑。