2012-01-24 25 views
6

我發現This Post,它看起來像我需要一個應用程序,我的問題是如何在不再需要https時恢復爲純http?它是否會基於沒有[RequireHttps]註解的操作本身做到這一點?MVC3之後[RequireHttps]如何確保非https使用

編輯:我發現一些帖子談論從https移動到http(here & here)。不過,我仍然希望能夠回答下面的問題。

或者,我討論了在新窗口中打開應用程序。 https是否適用於新窗口是否公平?

+0

一旦用戶通過requirehttps導航,如果他們返回到控制器不requirehttps他們仍然會在HTTPS下。 –

+0

爲什麼回到普通的http? Theres在那裏存在巨大的安全風險,首先表單驗證令牌傳輸明文,會話ID很容易被嗅探。在你的表單auth上使用RequireSsl(如果你正在使用它),但是在任何非ssl的地方記錄都會失敗。運行您的整個站點ssl +瞭解從單個記錄的http數據包中竊取會話是多麼容易。 –

+0

@AdamTuliper我目前沒有/需要任何驗證。我正在使用這個工作申請。一旦提交,再加密瀏覽器就毫無意義。我不會在會議中存儲任何內容。我們的網絡服務器在年齡上升,所以我需要做任何事情來減輕負載,因此如果我不再需要ssl,那麼爲什麼要麻煩呢?我懷疑加密是否會讓機器陷入困境,但我只是假設不使用它,因爲資源明智的加密不是免費的。 – Jared

回答

7

ASP.NET MVC的RequireHttps只有一種方法。在過去,我剛剛創建了自己的FilterAttribute實施,以便讓旅遊兩種方式:

EnsureHttpsAttribute

public class EnsureHttpsAttribute : FilterAttribute, IAuthorizationFilter 
    { 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     Verify.NotNull(filterContext, "filterContext"); 
     Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext"); 

     var request = filterContext.HttpContext.Request; 
     if (request.Url != null && !request.IsSecureConnection && !request.IsLocal) 
     filterContext.Result = new RedirectResult("https://" + request.Url.Host + request.RawUrl); 
    } 
    } 

EnsureHttpAttribute

public class EnsureHttpAttribute : FilterAttribute, IAuthorizationFilter 
    { 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     Verify.NotNull(filterContext, "filterContext"); 
     Verify.True(filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase), "filterContext"); 

     var request = filterContext.HttpContext.Request; 
     if (request.Url != null && request.IsSecureConnection) 
     filterContext.Result = new RedirectResult("http://" + request.Url.Host + request.RawUrl); 
    } 
    } 

幾乎相同的實現作爲RequireHttpsAttribute如果沒有記錯;儘管上述實現檢查它是否是Local請求並忽略了切換到HTTPS。

+0

對我的問題的第二部分的任何想法?如果我在新窗口中打開操作,我是否認爲https只適用於新窗口? – Jared

+0

假設在彈出窗口中有相對URL,新窗口中的所有內容都將保持HTTPS,除非您有絕對URL來顯式切換回HTTP。除非您明確導航或重定向到HTTPS,否則父窗口將保留在http中。 –

+0

重定向POST請求可能不是一個好主意,因爲這可能會混淆瀏覽器。 cf官方實現的屬性。 – nakhli

2
+0

有趣的文章和良好的信息。但是,我目前沒有在我的網站上進行任何身份驗證。一旦發生這種情況,我可以看到這是非常有用的,所以感謝鏈接。 – Jared

+0

我相信在SO上的其他答案和帖子,大多數人最終都會編寫自己的自定義屬性來處理獨特的情況。 –

+0

到目前爲止,這就是它的樣子。我認爲我最可能做的是讓它在https中完成表單或打開一個新窗口並將它們以前的瀏覽器窗口單獨保留後,自動重定向到非https絕對URL。 – Jared