我在Web应用程序(asp-mvc)上工作。 我们要求始终使用安全的Cookie。 我已经读过我应该在我的应用程序的web配置中添加:
这可以在我发布我的应用程序时保护我的cookie。
现在,问题是在我们的开发环境中我们使用HTTP协议,并且只在我们的生产环境中使用HTTPS协议。
在我的应用程序的第一页中,我有一个验证码验证(我们使用captchaMVC的dll)。 通过在web.config中添加提到的代码来保护我的cookie(在我们的开发环境中),验证码页面不会加载属性。 我有一个想法,也许是因为我尝试在我的开发环境中使用HTTP上的安全cookie(而不是HTTPS),也许在生产环境中,一切都能正常工作。 任何人都可以对这个话题有更多了解吗?
答案 0 :(得分:3)
HttpCookie.Secure = true;
documentation for HttpCookie.Secure property州:
获取或设置一个值,该值指示是否使用安全套接字层(SSL)传输cookie - 即仅通过HTTPS传输。
这令人困惑。
根本的事实是,无论连接是否安全,cookie都将始终发送给客户端。
这是必要的,原因有两个。首先,您的应用程序服务器可能位于防火墙/ NLB后面,该防火墙/ NLB具有用于实现SSL offloading的网站的SSL证书,其次,您可以通过非安全连接(具有网站的网站)显示您的网站登录部分视图)并通过安全连接发回登录表单,并且可能希望仅在连接安全时才传回您的cookie。
关键是,这仅在客户端有效。浏览器将决定是否发送cookie,具体取决于为当前请求选择的通信协议。
以下是我通过非安全连接使用安全cookie的方法。
Response Haders:
Response HTTP/1.1 200 OK
Cache-Control private
Content-Type text/html; charset=utf-8
Server Microsoft-IIS/8.0
Set-Cookie ASP.NET_SessionId=xxwcvdn22lietdqtvirucxzv; path=/; secure; HttpOnly
X-AspNet-Version 4.0.30319
Set-Cookie My=My Cookie Value; path=/; secure
X-Powered-By ASP.NET
Date Fri, 27 Nov 2015 13:14:00 GMT
Content-Length 510
回帖:
Request Headers:
Request GET /Default2.aspx HTTP/1.1
Accept text/html, application/xhtml+xml, */*
Accept-Language tr-TR
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding gzip, deflate
Host localhost:59442
DNT 1
Connection Keep-Alive
因此,您不应为开发环境或不支持SSL的任何环境(测试,preprod,分支等)指定HttpCookie.Secure = true;
。这意味着为这些环境提供了不同的web.config文件,如果您在web.config文件中保留连接字符串等,这无论如何都是必需的。
您的问题的答案是,是的,它应该适用于通过安全连接(https)访问网站的环境
您可以使用您喜爱的浏览器的开发者工具检查cookie是否已发回,适用于任何环境。