如何在ASP.NET MVC中执行[RequireHttps(Redirect = true)]的OPPOSITE

时间:2009-07-21 09:41:55

标签: asp.net-mvc requiressl

我知道在ASP.NET MVC中访问SSL页面的简单方法 - 通过[RequireSSL] attribute,但我对相反的最佳方法感到困惑。

我的网站上的标题栏中有很多链接,大部分链接都不需要SSL,我也不想使用SSL。

期货项目可以很容易地使用[RequireSSL(Redirect=true)]自动重定向到SSL页面,但它似乎不容易退出此上下文并自动重定向回http。

我错过了什么?

3 个答案:

答案 0 :(得分:4)

你没有遗漏任何东西;这没有开箱即用的功能。您可以通过the RequireSslAttribute source并修改它来轻松创建自己的。

答案 1 :(得分:1)

从其他地方的欺骗问题中回答:

How to step out from https to http mode in asp.net mvc.

注意:如果选择使用此方法,您的身份验证Cookie将在切换回HTTP后通过纯文本发送,并且可能被其他人窃取和使用。 See this。换句话说 - 如果您将其用于银行网站,则需要确保切换到http 首先将用户注销。

public class DoesNotRequireSSL: ActionFilterAttribute 
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext) 
        {
                var request = filterContext.HttpContext.Request;
                var response = filterContext.HttpContext.Response;

                if (request.IsSecureConnection && !request.IsLocal) 
                {
                string redirectUrl = request.Url.ToString().Replace("https:", "http:");
                response.Redirect(redirectUrl);
                }
                base.OnActionExecuting(filterContext);
        }
    }

答案 2 :(得分:0)

这非常值得一读(特别是为了实现从http不小心切换回https的安全隐患:

Partially SSL Secured Web Apps With ASP.NET - 不是MVC特定但相关的安全问题

Partial SSL Website with ASP.NET MVC - MVC友好

这是一个非常复杂的问题。仍然没有找到我想做的所有事情的真正解决方案,但认为这些文章可能会帮助其他人。