2012-10-31 21 views
2

我有一个ASP.NET MVC3应用程序在共享服务器上运行。我在服务器上安装了SSL证书,我的应用程序中的所有控制器都装有RequireHTTPS。目的是确保没有页面未加密(即所有页面通过HTTPS提供)。但是,可以不加密地访问某个页面(例如,js,一个HTML错误页面)(通过将80添加到请求中的主机名)。诚然,我所谈论的网页是静态的,但我如何保护我网站中的所有网页,防止其中任何网页未加密下载。我无权访问IIS服务器设置,因为这是共享站点,但是有没有办法通过使用HTTP处理程序或重写URL模块(或者我可以直接在文件夹上设置权限)?在MVC应用程序的所有页面上实施HTTPS

感谢您的任何信息。

+0

您的意思是页面? html文件? – VJAI

+0

http://serverfault.com/questions/165835/how-to-restrict-access-to-web-pages-for-https – VJAI

+0

感谢您的回应,马克。 “页面”是指所有的HTML页面,JS脚本,图像文件。我已经推断了这些问题(我认为):包括他们使用@ Url.Content,它已被替换为直接的“https:// ...”链接。但是,我使用的是DevExpress组件,它们有一个通过“DXR.axd”访问的处理程序,它不使用加密来请求资源(例如CSS文件,图像),我不确定是否可以更改。有些东西仍然不安全地被访问,我需要揪出它或者死掉。 :) –

回答

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

+0

谢谢,我不是专家,我想学习;这个ActionFilter做什么[RequireHttps]不会呢?无论如何,这个问题可能是我要求内容文件的方式;我使用了@ Url.Content,我用直接的“https:// ...”链接取代了每个地方。然后,我尝试只允许通过SSL匿名访问,我仍然被要求授权。所以仍然有SOMETHING被不安全地访问,我认为它可能与DevExpress组件有关,它们有一个通过“DXR.axd”访问的处理程序,它不使用加密,AFAIK也不能更改。我会继续尝试。再次感谢。 –

+0

我实际上并不知道RequireHttps Action Filter :)它可能在我创建这个之后被释放..我在mvc 2中创建了它,我相信。所以是的,它的功能与我创建的相同。感谢有关的信息。 – twaldron

+1

你的意思是我实际上做了一个贡献? :)我很难相信...无论如何,我需要对HTTP,HTTPS,端口80和443等进行认真研究,因为我真的不知道@ Url.Content是否是问题还是其他问题。我的意思是:将80添加到主机名并重新发出请求?再次感谢您的时间。 –

相关问题