3

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

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

感谢您提供任何信息。

4

1 回答 1

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 的任何控制器都将继承这个控制器。希望对您有所帮助只需要确保所有“页面”都是控制器操作返回的视图。如果需要,这应该是一个非常容易的更改。

于 2012-10-31T14:21:56.057 回答