问题几乎说明了一切。我的观点是,当用户没有真正登录时,用户是否能够更改其cookie的值以显示“已记录”?
答案 0 :(得分:1)
那么如果我改变user_id=1
,我会成为管理员吗?
如果我在地址栏中输入内容怎么办:
javascript:document.cookie=user_id=1&logged_in=true
一般来说,重新发明风团是一个可怕的想法。特别是在安全性方面,cookie应该始终是一个非常大的随机值。无论您使用什么平台,都应该已经为您构建了会话处理程序。
答案 1 :(得分:1)
Cookie不安全。正如其他人在此指出的那样,您不应该信任从客户端收到的任何数据。也就是说,cookie通常用于存储登录用户的会话ID,这就是你所要求的。
Signing your cookies会帮助您检测是否已在客户端上被篡改。基本上,您创建了一个HMAC个键/值和一个只有服务器才知道的密钥。在每个请求中,您重新计算MAC:如果它与之前的值匹配,则一切都很好;如果没有,你拒绝该请求。
对于更敏感的数据,您可以选择加密Cookie。大多数Web框架允许您使用应用程序代码外部的某种“中间件”透明地执行这些操作,因此每个请求都会进行签名/验证和加密/解密。
此外,您应该知道仅仅保护您的Cookie不能保证,呃...安全:)您可能仍然容易受到Cross-site Request Forgeries的攻击。</ p>
有关Cookie的更多信息,请查看this article。
答案 2 :(得分:0)
通常,服务器生成的令牌存储在cookie中。当cookie过期时,令牌丢失,用户需要再次登录。你不能伪造令牌。它不是表示用户是否已登录的布尔值。
答案 3 :(得分:0)
您从客户端获得的任何信息(包括cookie)都是不安全的。安全的方法是使用随机哈希设置cookie,将数据库中的哈希值与ID和时间戳(甚至IP)一起记录,然后根据存储的哈希值检查传入的cookie。如果您将cookie设置为在一段时间后过期,请确保您在服务器上拒绝它们,如果它们不应该到达它们。