在Web开发中,启用会话状态时,会话ID存储在cookie中(在cookieless模式下,将使用查询字符串)。在asp.net中,会话ID自动加密。互联网上有很多关于如何加密cookie的主题,包括会话ID。我可以理解为什么要加密私人信息(如DOB),但任何私人信息都不应该存储在cookie中。因此,对于其他cookie值,例如会话ID,目的加密是什么?它会增加安全性吗?无论你如何保护它,它都会被送回服务器进行解密。
更具体一点,
出于身份验证的目的,
vs
Asp.net表单身份验证机制(我认为它依赖于会话或会话ID)
后者提供更好的安全性吗?
答案 0 :(得分:23)
对Session Hijacking等会话的攻击旨在获得有效的会话ID。如果您现在要加密会话ID,攻击者只会瞄准加密的会话ID,您将没有任何优势。因此,加密会话ID是没用的。请记住,会话ID只是一个用于标识会话的随机值。攻击者不需要知道该随机值是否具有某些特定含义;他们只需知道随机值。
如果您想保护会话安全,请使用HTTPS通过SSL加密整个HTTP通信,并仅使用标志设置cookie
答案 1 :(得分:4)
我认为“您应该始终加密数据”所指的是使用正确签名的证书在您的连接中使用SSL。这将加密客户端和服务器之间的整个通信。
我看不到任何其他用途,否则另外加密会话ID(首先已经是一个非常随机生成的ID)。
答案 2 :(得分:2)
OWASP site
中记录了这一点通过web.config
元素中的system.web/httpCookies
<httpCookies httpOnlyCookies="true" …>
或以编程方式
C# Code:
HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);
答案 3 :(得分:1)
通过SSL(HTTPS)发送的数据是完全加密的,包括标头(因此是cookie),只有您发送请求的主机未加密。它还意味着GET请求已加密(URL的其余部分)。虽然攻击者可以强制客户端通过HTTP进行响应,但强烈建议您在cookie中使用“安全”标志,强制使用HTTPS发送cookie。
Secure属性没有关联的值。而是,属性名称的存在表明指定了安全行为。 Secure属性旨在将cookie通信限制为加密传输,指导浏览器仅通过安全/加密连接使用cookie。当然,Web服务器应该通过安全/加密连接设置安全cookie,以免以首次发送到Web浏览器时允许窃听的方式传输cookie信息。
答案 4 :(得分:-3)
加密随机的东西会让你无处可以......