Asp.net mvc 3 在MVC3中,在https下运行每个操作是否有缺点?
我有一个网站必须是安全的-在家庭控制器上有[RequireHttps]属性有缺点吗?Description 当然,如果您的证书过期,您的用户将收到警告。 但是,如果您想将Https属性添加到整个站点,有两种方法可以做到这一点Asp.net mvc 3 在MVC3中,在https下运行每个操作是否有缺点?,asp.net-mvc-3,https,Asp.net Mvc 3,Https,我有一个网站必须是安全的-在家庭控制器上有[RequireHttps]属性有缺点吗?Description 当然,如果您的证书过期,您的用户将收到警告。 但是,如果您想将Https属性添加到整个站点,有两种方法可以做到这一点 在应用程序\u BeginRequest方法中重定向 使用条件过滤器。您可以将[Https]属性添加到每个操作方法、特定控制器或任何其他条件 样品 在应用程序\u BeginRequest方法中重定向 protected void Application_BeginRequ
应用程序\u BeginRequest
方法中重定向条件过滤器
。您可以将[Https]
属性添加到每个操作方法、特定控制器或任何其他条件应用程序\u BeginRequest
方法中重定向
protected void Application_BeginRequest(Object sender, EventArgs e)
{
if ( !Request.IsSecureConnection)
{
string path = string.Format("https{0}", Request.Url.AbsoluteUri.Substring(4));
Response.Redirect(path);
}
}
条件过滤器
- 将此类添加到项目中
public class ConditionalFilterProvider : IFilterProvider { private readonly IEnumerable<Func<ControllerContext, ActionDescriptor, object>> _conditions; public ConditionalFilterProvider( IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions) { _conditions = conditions; } public IEnumerable<Filter> GetFilters( ControllerContext controllerContext, ActionDescriptor actionDescriptor) { return from condition in _conditions select condition(controllerContext, actionDescriptor) into filter where filter != null select new Filter(filter, FilterScope.Global, null); } }
是的,有一个缺点 其中一些原因是: 页面不能缓存在共享缓存中, 必须在浏览器和服务器两侧进行加密和描述, 必须在服务器端使用受信任的证书,以避免连接不安全(证书不便宜)
但是,为了拥有安全的站点,必须支付性能成本(这是非常低的性能成本),因此如果需要,请使用HTTPS,对于一些重要的数据交换,请删除HTTP并在您的网站上仅启用HTTPS绑定 这与MVC有什么关系?HTTPS使您的通信更加安全,但无论您使用哪种框架为页面提供服务,通信速度都会变慢。这与MVC无关吗?有多少其他框架利用了属性[RequireHttps]?asp.net mvc3的具体运行速度要慢多少?请看您选择的答案。这就是问题的答案:“在所有主页请求上使用HTTPS通信有哪些不利方面?”。没有涉及ASP.NET MVC。@Qua:我认为您可能应该查阅websters对上下文的定义,因为这个概念绝对不在您的掌握范围之内。我不担心整个网站都被https包围,我只是好奇它是否有缺点。检查我的最新答案。谢谢你提供的详细列表Erik。这只会被少数人使用,所以我认为这些增加不会对服务器的整体性能造成很大影响。谢谢@buda,该站点已经有了证书,并且没有进行整页缓存。我主要关心的是性能,所以很高兴听到运行https不会给服务器带来太多负担。这将不是一个高流量的网站。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
IEnumerable<Func<ControllerContext, ActionDescriptor, object>> conditions =
new Func<ControllerContext, ActionDescriptor, object>[] {
(c, a) => new RequireHttpsAttribute()
};
var provider = new ConditionalFilterProvider(conditions);
FilterProviders.Providers.Add(provider);
filters.Add(new HandleErrorAttribute());
}