在MVC应用程序的所有页面上实施HTTPS

时间:2012-10-31 13:31:00

标签: asp.net-mvc

我在共享服务器上运行了一个ASP.NET MVC3应用程序。我在服务器上安装了SSL证书,我的应用程序中的所有控制器都装有RequireHTTPS。目的是确保没有未加密的页面(即所有页面都通过HTTPS提供)。

但是,可以未加密地访问CERTAIN页面(例如js,HTML错误页面)(通过向请求中的主机名添加:80)。当然,我所谈论的页面是静态的,但我如何保护我网站中的所有页面,防止其中的任何页面未加密下载。我无法访问IIS服务器设置,因为这是一个共享站点,但有没有办法使用HTTP处理程序或重写URL模块(或者我可以直接在文件夹上设置权限)?

感谢您的任何信息。

1 个答案:

答案 0 :(得分:0)

我使用像这样的动作过滤器属性

public class RequireSSL : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase req = filterContext.HttpContext.Request;
        HttpResponseBase res = filterContext.HttpContext.Response;

        //Check if we're secure or not and if we're on the local machine
        if (!req.IsSecureConnection && !req.IsLocal)
        {

            var builder = new UriBuilder(req.Url)

                              {
                                  Scheme = Uri.UriSchemeHttps,
                                  Port = 443
                              };
            res.Redirect(builder.Uri.ToString());
        }
        base.OnActionExecuting(filterContext);

    }


}

然后我用这个属性

创建了一个名为SecureController的基本控制器
  [RequireSSL]
 public class SecureController : Controller
{

}

然后我想成为SSL的任何控制器都将继承此控制器。 希望有所帮助 您只需要确保所有“页面”都是控制器操作返回的视图。如果需要,这应该是一个非常容易的变化。