2009-11-08 48 views
2

我們有一個非常簡單的ASP.NET Web應用程序,主要包括靜態內容和我們想用SSL保護的單一表單。受保護的頁面位於其自己的文件夾中,但它從不安全的母版頁繼承,並與網站的其他部分共享一些其他資源(徽標,css文件和一些圖片)。該網站由第三方託管,並且更改IIS配置(或更改爲其他主機)不是一種選擇。ASP.NET中的部分SSL Webforms不改變IIS配置

據我們瞭解,有部分與SSL上ASP.NET打交道時有幾個挑戰:

  1. 防止了「此頁包含安全和不安全的項目」的消息。
  2. 提供對相對URL的支持,因爲在重定向到受保護頁面時,它們默認情況下不起作用。

我們不希望安全的,因爲潛在的性能問題整個網站,那麼什麼是隻保護一個特定網頁或文件夾的最佳方式,在任何資源通過這個加載的同時保證頁面也會被保護?

回答

2

我結束了重寫OnInit方法,我想,以確保在頁面上,使用該解決方案描述here

protected override void OnInit(EventArgs e) 
{ 
    if (!Request.IsSecureConnection && !Request.IsLocal) 
    { 
     UriBuilder builder = new UriBuilder(Request.Url) 
     { 
      Scheme = Uri.UriSchemeHttps, 
      Port = 443 
     }; 
     Response.Redirect(builder.Uri.ToString()); 
    } 
    base.OnInit(e); 
} 

對於其餘頁面,我使用OnInit方法使用以下代碼繼承基頁:

protected override void OnInit(EventArgs e) 
{ 
    if (Request.IsSecureConnection) 
    { 
     UriBuilder builder = new UriBuilder(Request.Url) 
     { 
      Scheme = Uri.UriSchemeHttp, 
      Port = 80 
     }; 
     Response.Redirect(builder.Uri.ToString()); 
    } 
    base.OnInit(e); 
} 
1

我發現最簡單的方法是通過向特定頁面添加代碼來檢查當前請求是否使用HTTPS。如果不是,請使用HTTPS重定向到相同的URL。然後,整個頁面將使用SSL加載。然後,確保鏈接或重定向到其他頁面使用絕對HTTP。換句話說,SSL可以被啓用,但不是整個站點所必需的,並且網站的鏈接將控制它何時被使用。

的一種方式,以確保在網站上點所有相關鏈接到非HTTPS URL,即使當前頁面目前使用HTTPS是使用HTML基礎標籤:

<head> 
    <base href="http://yourdomain/" /> 
</head> 
+0

Thx Jacob。那麼根文件夾上的母版頁以及圖像和css文件如何?當客戶端請求安全頁面時,它們都將使用SSL加載? 此外,有沒有什麼方法可以動態更改鏈接,以便它們不需要絕對URL? – Leonardo 2009-11-09 01:17:04

+0

是的,主頁面及其所有鏈接到的資源也會以HTTPS形式出現,因此應避免使用「安全和非安全」消息。 – Jacob 2009-11-09 19:00:06

1

SSL工作現場級別,而不是文件夾級別。一旦你安裝了SSL證書,你的網站就可以使用https協議訪問,如下所示:https://www.example.com。同時,您的網站仍可通過http://www.example.com訪問 - 無性能問題。

只要您使用相對路徑,就會使用https協議加載圖像和CSS文件。主頁面不會被客戶端單獨請求,所以SLL在這裏並不適用。

使用此代碼有絕對的URL的鏈接:

<a href='<%= "https://" + Request.Url.Host + Page.ResolveUrl("~/Secure.aspx") %>'>Click me</a>