我試圖在我的網站的選定頁面上實現HTTPS。使用屬性RequireHttps適用,但會導致測試問題,因爲我們沒有在本地安裝證書。要求https和派生自RequireHttpsAttribute
我正在尋找的解決方案將需要忽略本地主機,並忽略一臺測試服務器,同時在我們的第二臺測試服務器上工作,我們在那裏有一個證書。
這方面的一些進一步的背景。目的是將網站逐漸遷移到https。這是一個電子商務網站,所以顯然部分已經是安全的,我知道,由於很多原因,將整個網站移到安全地點是件好事。我也知道,一旦你從頁面A移動到頁面B,其中B是安全的,那麼當你移回到A時,它不會回到HTTP,這很好。 我想分階段移動網站,以防萬一內容不匹配,網站地圖,搜索引擎優化,谷歌排名等問題。
一些我嘗試過的各種解決方案 - 我已經實現了派生類從RequireHttps屬性如下:
public class CustomRequireHttps : RequireHttpsAttribute
{
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.Url != null && (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)
&& !String.Equals(filterContext.HttpContext.Request.HttpMethod, "HEAD", StringComparison.OrdinalIgnoreCase)
&& !filterContext.HttpContext.Request.Url.Host.Contains("localhost")
&& !filterContext.HttpContext.Request.Url.Host.Contains("testing")))
{
base.HandleNonHttpsRequest(filterContext);
}
}
}
並已申請此屬性來一個頁面,但按預期並未奏效,它要麼適用HTTPS的網站上的所有頁面或完全不工作。
我也試過這個解決方案工作,但只在本地主機上,而不是兩個測試服務器上:
#if !DEBUG
[RequireHttps]
#endif
然後我試圖重寫,像這樣的OnAuthorizartion方法:
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (filterContext.HttpContext != null && filterContext.HttpContext.Request.IsLocal)
{
return;
}
base.OnAuthorization(filterContext);
}
它的工作但是一旦我將它帶到服務器上並突然顯示測試證書,每個頁面都是HTTPS,我不明白這一點,因爲我只在一個頁面上使用了此派生屬性。
所以,我期望實現的是在我的網站上選定的頁面上實現HTTPS。在本地主機和第一臺測試服務器上需要忽略此HTTPS請求,但需要在具有證書的第二臺測試服務器上忽略NOT。
到目前爲止,它要麼根本不工作,要麼在網站上的每個頁面上。
但是,這就是踢球者,如果我使用RequireHttps屬性,它可以在第二臺測試服務器上完美工作,但會在沒有證書的所有服務器上導致問題。 「完美地工作」是指它僅在我使用該屬性的頁面上實現HTTPS,並且不會突然切換所有頁面以確保安全。
任何想法我在做什麼錯在這裏?
這是我們當前系統的工作方式,除了不允許選擇性實現HTTPS外,這是正常的。我意識到,一旦你在一個安全的連接,它不會切換回來,那很好。這裏的目標是最終將整個站點遷移到HTTPS,但要在整個階段完成。所以,當你去結帳的時候顯然是安全的,但我還想添加一兩個安全的頁面。如果他們沒有問題,那麼再移動一兩個....等等。 –