Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Https:从http隐藏控制器方法_Asp.net Mvc_Ssl_Asp.net Mvc 4_Https_Attributes - Fatal编程技术网

Asp.net mvc Https:从http隐藏控制器方法

Asp.net mvc Https:从http隐藏控制器方法,asp.net-mvc,ssl,asp.net-mvc-4,https,attributes,Asp.net Mvc,Ssl,Asp.net Mvc 4,Https,Attributes,好的,我们可以使用它来确保只能通过SSL调用控制器/控制器方法。在我们试图通过HTTP点击该方法的情况下,服务器向同一控制器(方法)的HTTPS版本发出302 这对我的用户意味着,首先不安全地发出第一个请求是可以接受的。我觉得这是不能接受的。在我抛出一个属性,该属性在HTTP版本被命中的情况下会发出404/500状态码之前,这样的属性是否已经存在?如果使用HTTP请求页面的简单行为不会损害任何用户数据,我认为重定向应该足够了,并且是适合您的场景的完美方法。为什么要用我们可以处理的事情来烦扰用户呢

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


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

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

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

在我小跑出一个属性之前,该属性在 在HTTP版本被命中的情况下,这样的属性是否已经存在 存在

不,这种属性不存在

在我小跑出一个属性之前,该属性在 在HTTP版本被命中的情况下,这样的属性是否已经存在 存在

不,这种属性不存在

这意味着我的用户可以接受发布第一个 首先不安全地请求。我不觉得这是什么 可以接受。在我小跑出发出404/500的属性之前 在HTTP版本被命中的情况下,状态代码会执行以下操作: 属性是否已存在

如果您不想让应用程序使用
http://
而不是
https://
来处理这些URL,请不要提供任何服务(404或无连接)

请注意,检查是否使用了SSL/TLS(并与有效证书一起正确使用)是非常重要的。确保指向这些地址的链接确实使用了
https://
,并且用户希望使用
https://
,至少在起始页使用。如果浏览器支持它,则可以考虑使用HSTs(或者可能永久地重定向到缓存的入口点)。 另一条评论说:


我不想任何关于url的信息以任何方式泄露给任何第三方

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

再次:确保您的用户希望使用
https://
,一旦他们进入安全页面,确保您的链接/表单操作到站点的其他部分都使用
https://

这意味着我的用户可以接受发布第一个 首先不安全地请求。我不觉得这是什么 可以接受。在我小跑出发出404/500的属性之前 在HTTP版本被命中的情况下,状态代码会执行以下操作: 属性是否已存在

如果您不想让应用程序使用
http://
而不是
https://
来处理这些URL,请不要提供任何服务(404或无连接)

请注意,检查是否使用了SSL/TLS(并与有效证书一起正确使用)是非常重要的。确保指向这些地址的链接确实使用了
https://
,并且用户希望使用
https://
,至少在起始页使用。如果浏览器支持它,则可以考虑使用HSTs(或者可能永久地重定向到缓存的入口点)。 另一条评论说:


我不想任何关于url的信息以任何方式泄露给任何第三方

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


再次:确保您的用户希望使用
https://
,一旦他们进入安全页面,请确保指向站点其他部分的链接/表单操作都使用
https://

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

[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");
        }
    }
}

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

[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");
        }
    }
}

我不希望任何关于url的信息以任何方式泄露给任何第三方。我不希望任何关于url的信息以任何方式泄露给任何第三方。我不认为为时已晚。显然,对于当前泄漏信息的请求,我无能为力,但这对客户端来说是一个更强烈的指示,他们不应该这么做,而不仅仅是发出302。。。也许他们下次会记得。当然,你想为普通的
http://
页面开发至少404(或类似)是对的,但是对于那些请求来说已经太晚了。用户通常不会键入URL在应用程序中从一个页面转到另一个页面(特别是不通过更改方案):他们单击您的链接/按钮。他们发出的第一个请求总是有问题的:您可以使用301而不是302,这样浏览器就可以记住,当然也可以在支持HST时记住。之后,应用程序应该使用
HTTPS://
URL本身使它们保持在HTTPS上