【问题标题】:Difference between RequireHttps attribute and UseHttpsRedirection in asp.net coreasp.net core中RequireHttps属性和UseHttpsRedirection的区别
【发布时间】:2020-04-16 16:38:41
【问题描述】:

我正在阅读官方文档以在 ASP.NET Core 中实施 HTTPS。在那里我发现了一个警告 -

不要在接收敏感信息的 Web API 上使用 RequireHttpsAttribute 信息。 RequireHttpsAttribute 使用 HTTP 状态码来重定向 浏览器从 HTTP 到 HTTPS。 API 客户端可能不理解或不服从 从 HTTP 重定向到 HTTPS。此类客户可能会通过以下方式发送信息 HTTP。 Web API 应该:

  1. 不监听 HTTP。
  2. 关闭状态码为 400(错误请求)的连接并且不处理请求。

我对 [RequireHttps] 属性的了解是它设置了 302 Found 代码和一个重定向 url。像这样 -

GET http://api.example.com/values

302 Found
Location: https://api.example.com/values

另一方面,官方文档建议使用 -

HTTPS重定向中间件(UseHttpsRedirection)重定向HTTP 对 HTTPS 的请求。

  • 使用默认的 HttpsRedirectionOptions.RedirectStatusCode (Status307TemporaryRedirect)。

据我了解,它还将HTTP重定向到HTTPS,具有不同的状态码307。

对我来说,他们正在做类似的事情。我不清楚使用HTTPS Redirection Middleware (UseHttpsRedirection) 比使用RequireHttps Attribute 有什么好处。我在这里缺少什么?

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    我正在阅读官方文档以在 ASP.NET Core 中强制执行 HTTPS。

    我对 [RequireHttps] 属性的了解是它设置了 302 Found code 和一个重定向 url。

    另一方面,官方文档建议使用HTTPS重定向中间件(UseHttpsRedirection)

    对我来说,他们正在做类似的事情。

    我想你提到的信息来自this official doc关于“在 ASP.NET Core 中强制执行 HTTPS”。

    众所周知,对于 Web API 场景,API 客户端(消费者/调用者应用程序)可能不是浏览器客户端,它不会理解或服从通过 HTTP 状态码从 HTTP 到 HTTPS 的重定向。我们应该避免使用带有重定向状态代码的 API 端点响应客户端,因此警告部分建议“不要在接收敏感信息的 Web API 上使用RequireHttpsAttribute”。

    在警告部分,它还展示了两种拒绝 Web API 的不安全 HTTP 请求的方法:1)不暴露 HTTP 端点; 2) 返回错误代码。在我看来,“拒绝 Web API 场景中不安全的 HTTP 请求”的话题就到此为止了。

    此外,我们应该注意,本文档的主题是关于将 HTTP 请求重定向到 ASP.NET Core 中的 HTTPS,RequireHttpsAttribute 可以应用于特定的控制器/操作,以对整个 ASP.NET Core 强制执行 HTTPS Web 应用程序,建议使用 HTTPS 重定向中间件(并不意味着我们应该使用此中间件来拒绝对 Web API 的不安全 HTTP 请求)。

    【讨论】:

    • 所以这是我从你的回答中理解的(如果我错了,请纠正我),推荐的方法是不要让请求转到 api 端点然后重定向,而是使用中间件来做重定向。
    • 正如文档所述“没有 API 可以阻止客户端在第一次请求时发送敏感数据”。推荐的方法是:1)不监听HTTP; 2) 返回错误代码,不服务非 HTTPS 请求。
    猜你喜欢
    • 2023-03-19
    • 2019-03-04
    • 2015-05-13
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2011-08-26
    相关资源
    最近更新 更多