当ASP.NET Web应用程序设置Cookie时,它的安全性如何?

时间:2012-05-21 15:05:35

标签: c# asp.net security cookies encryption

我想知道一个cookie是多么安全,以及它是否可以被设置它的其他应用程序读取。

我想设置一个cookie,用于存储我网站的一些敏感数据,以便随时阅读。

其他应用程序可以读取我的应用程序设置的cookie吗?如果是这样,我是否需要加密存储在cookie中的数据?

注意:我无法访问SSL。

编辑:我想要存储的信息是用户详细信息。我正在创建一个白标网站。根据特定网址的请求(例如www.mysite.com/joebloggs),我希望将有关Joe Bloggs的用户数据存储在客户端计算机上。当客户返回www.mysite.com时,我希望从cookie中读取Joe Bloggs上的数据,以便我可以跟踪它。

3 个答案:

答案 0 :(得分:9)

在用户计算机上运行的任何代码(包括浏览器插件)都可以随时读写cookie,而且您无法做到这一点。 (加密除外)

任何嗅探网络的人都可以读取和写入非HTTPS站点的所有cookie(如果适用)。

其他域上的Web应用程序无法读取或写入cookie,除非在兄弟域的有限情况下(例如x.cloudapp.nety.cloudapp.net)(请参阅cookie折腾)

答案 1 :(得分:1)

如果您可以避免在Cookie中包含敏感数据,那么这是最好的。正如在另一个答案中所说,用户计算机上的任何内容都可能始终受到损害。

但是,如果您需要,则应始终加密数据。表单身份验证cookie上的默认加密是通过DPAPI使用运行Web应用程序的用户上下文和机器密钥,因此它不适合负载平衡的环境。

在这种情况下,您应该通过数字证书(例如RSA)进行加密。

对于您自己管理的cookie,您必须使用Crypto API或某些包装器或实用程序类,例如this one。 对于Forms Authentication cookie,有protection设置可让您配置加密机制。

答案 2 :(得分:1)

如果您对使用SSL的安全性不够关注,那么一个简单且相对简单的选择是为用户生成新的Guid,将Guid存储在数据库中,并将Guid写入cookie。

我绝对不会用它来保护信用卡或银行或任何高度敏感的东西,但如果你需要保护这些数据,那么SSL是最低要求。

在一天结束时,可以在没有SSL的情况下嗅探流量,因此任何通过网络发送的cookie都可能被具有恶意意图的人嗅探,如果该cookie用于识别系统上的用户,那么他们很容易冒充那个用户。使用Guid的好处是,如果有人设法找到1个人的cookie,他们将无法猜出一个模式来找出其他人的,所以虽然1个人可能会受到损害,但至少你的整个用户群不会!

可能合理的方法是生成一个guid和一个到期日期,加密它们并将其设置为cookie - 然后检查用户带回cookie时的到期日期,并定期更改guid。同样,这对网络嗅探并不安全,但它确实提供了一定程度的安全性以及跨会话记住用户的便利性。