0

好的,所以我们RequireHttpsAttribute可以使用它来确保只能通过 SSL 调用控制器/控制器方法。在我们尝试通过 HTTP 访问该方法的情况下,服务器会向同一控制器(方法)的 HTTPS 版本发出 302。

这对我的用户意味着,首先不安全地发出第一个请求是可以接受的。我不觉得这是可以接受的。在我推出一个在命中 HTTP 版本的情况下发出 404/500 状态码的属性之前,这样的属性是否已经存在?

4

4 回答 4

2

在我推出一个在命中 HTTP 版本的情况下发出 404/500 状态码的属性之前,这样的属性是否已经存在?

不,这样的属性不存在开箱即用。

于 2013-03-15T13:51:53.963 回答
1

如果使用 HTTP 请求页面的简单行为不会损害任何用户数据,我会说重定向应该足够了,并且是您的场景的完美方法。为什么要用我们可以处理的事情来打扰用户?

于 2013-03-15T13:50:58.250 回答
1

这对我的用户意味着,首先不安全地发出第一个请求是可以接受的。我不觉得这是可以接受的。在我推出一个在命中 HTTP 版本的情况下发出 404/500 状态码的属性之前,这样的属性是否已经存在?

如果您不希望您的应用程序使用http://而不是为这些 URL 工作https://,请不要提供任何服务(404 或无连接)。

请注意,检查是否使用了 SSL/TLS最终是用户的责任(并与有效证书一起正确使用)。确保指向这些地址的链接https://确实使用,并且用户期望https://被使用,至少对于起始页。如果他们的浏览器支持它(或者可能永久重定向到将被缓存的入口点),您可以考虑使用 HSTS。

从另一条评论:

我不希望以任何方式向任何第三方泄露有关该 url 的任何信息

一旦从客户端使用这个http://URL 发出请求,在服务器上做任何事情就没有什么意义了。为时已晚:窃听者可能已经看到了请求。(如果您自己的页面没有链接到外部网站,他们也不会在引荐来源网址中看到该地址。)即使您的服务器甚至没有侦听普通 HTTP 端口,活跃的 MITM 攻击者(或更简单地说,代理)可能会监听该请求并获取 URL,甚至没有到达您的服务器。

再次重申:确保您的用户希望https://被使用,一旦他们进入安全页面,请确保您对网站其他部分的链接/表单操作全部使用https://.

于 2013-03-15T14:06:10.753 回答
0

因此,作为参考,这是我的新属性:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
                Inherited = true, 
                AllowMultiple = false)]
public class HttpsOnlyAttribute : FilterAttribute, IAuthorizationFilter
{
    private readonly bool disableInDebug;

    public HttpsOnlyAttribute(bool disableInDebug = false)
    {
        this.disableInDebug = disableInDebug;
    }

    public virtual void OnAuthorization(AuthorizationContext filterContext)
    {
#if DEBUG
        if (disableInDebug) return;
#endif
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }
        var context = filterContext.HttpContext;
        var request = context.Request;
        var isSecure = request.IsSecureConnection;
        if (!isSecure)
        {
            throw new HttpException(404, "Not found");
        }
    }
}
于 2013-03-15T14:39:53.900 回答