2012-10-31 44 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添加到主機名並重新發出請求?再次感謝您的時間。 –

相關問題