2010-11-09 94 views
3

基本上,我的網站中有一項要求,即所有Cookie都必須安全。我試圖確保FormsAuthentication cookie的安全,但是,我希望在我的本地開發站點上不需要設置SSL,但活動站點仍然可以保護cookie。啓用實時環境的Cookie和啓用環境的非SSL的SSL

此live/dev狀態存儲在配置xml文件中。該文件包含網站運行的每臺機器的設置。它可以通過Config.IsSecure

if (Config.IsSecure) 
{ 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, login.Username, DateTime.Now, DateTime.Now.AddMinutes(30), false, "User", FormsAuthentication.FormsCookiePath); 

    string cookieStr = FormsAuthentication.Encrypt(ticket); 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr); 
    cookie.Path = FormsAuthentication.FormsCookiePath; 


    System.Configuration.Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~"); 
    AuthenticationSection authenticationSection = (AuthenticationSection)configuration.GetSection("system.web/authentication"); 
    FormsAuthenticationConfiguration formsAuthentication = authenticationSection.Forms; 
    formsAuthentication.RequireSSL = true; 
    cookie.Secure = true; 
    configuration.Save() 
} 

FormsAuthentication.SetAuthCookie(login.Username, false); 

所以我得到一個錯誤的保存部分。說有一個臨時文件無法訪問。

任何想法如何解決這個問題?

Gurpreet

+0

最簡單的答案是在生產中使用IIS規則來保護您的站點,該規則將強制所有請求爲HTTPS,然後使用配置轉換將表單驗證配置的'requireSSL'屬性設置爲true。 – 2010-11-11 14:28:05

+0

嘿克里斯,我將如何去「使用配置轉換來將表單驗證配置的requireSSL屬性爲真」 – swissarmykirpan 2010-12-13 17:28:04

回答

2

我不太明白你想要做什麼,或者爲什麼你必須編寫自定義代碼來做到這一點。我相信你可以配置表單身份驗證以在web.config中對cookie使用SSL。然後,只需擁有一個用於實況和開發的不同web.config。

requireSSL屬性應該完全按照你的意願去做? (將Cookie設置爲僅安全,以便瀏覽器在安全連接時僅返回表單身份驗證cookie)。

喜歡的東西(在web.config中)

<authentication mode="Forms"> 
    <forms timeout="30" loginUrl="/MyLogin.aspx" protection="All" requireSSL="True" /> 
</authentication> 
1

如果你不想管理兩個web.config文件中,另一種選擇是簡單地在本地計算機上安裝一個證書 - 這真的不是難做。

我認爲How to create a self-signed wildcard SSL certificate for IIS 6?的答案有你需要的信息。只要確保您正確設置主機名稱(無論是您的機器名稱還是本地主機名稱),或者嘗試連接到您的網站時都會收到警告。

也有可能,如果你正在使用VS2010/.NET 4的web.config文件執行轉換,筆者認爲:http://msdn.microsoft.com/en-us/library/dd465318.aspx

+0

我試圖避免在本地機器上創建證書 – swissarmykirpan 2010-11-09 14:14:48

0

微米。如果沒有確保整個網站的安全,您無法保護cookie。 cookie使用標準HTTP請求進行交換,下載該頁面,因此每個頁面都必須是安全的。

你所保護的是登錄表單......但那不是cookie。如果您在認證後將cookie重定向回http站點,cookie仍然不安全。

更新:

HttpCookie.Secure只做一兩件事 - 如果沒有SSL,也不會發送cookie發送到客戶端。如果通過HTTP訪問站點,則生成的cookie標頭將不包含您的cookie。 HttpCookie.Secure不會強制網站切換到SSL,只要我正確理解文檔,它就會默默地破壞您的代碼。

+0

該網站將通過僅訪問http開發環境。整個網站只能在實時環境 – swissarmykirpan 2010-11-09 14:30:53

+0

上運行SSL,那麼問題是什麼?僅使用URL重寫器強制使用https,或僅允許https綁定,不使用http。你不需要編碼任何東西 – Artemiy 2010-11-09 21:59:26

+0

我不想在開發機器上強制使用SSL https – swissarmykirpan 2010-11-10 09:15:25