Asp.net mvc Https:从http隐藏控制器方法
好的,我们可以使用它来确保只能通过SSL调用控制器/控制器方法。在我们试图通过HTTP点击该方法的情况下,服务器向同一控制器(方法)的HTTPS版本发出302Asp.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请求页面的简单行为不会损害任何用户数据,我认为重定向应该足够了,并且是适合您的场景的完美方法。为什么要用我们可以处理的事情来烦扰用户呢
这对我的用户意味着,首先不安全地发出第一个请求是可以接受的。我觉得这是不能接受的。在我抛出一个属性,该属性在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上