2010-11-09 91 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