我正在尝试开发一个PHP登录脚本,它可以使用cookie启动安全登录。我知道你可以用电脑做很多事情,我正在向社区询问有关cookies安全性的信息。我最大的问题是:有人能在不登录的情况下创建cookie,欺骗帐户并访问站点吗?检查这个用户是否合法的最安全的方法是什么?
发布于 2015-11-10 16:01:37
在我看来,使用cookie over session更安全,因为它的基本会话标识符也存储在cookie或http请求中,这些请求更容易发生会话劫持。根据需求,我通常是将所有的用户标识符存储在一个cookie中。有点像:ID:PUBLIC_KEY:USER_DATA_SESSION_HASH_VERIFIER。其中:
ID是用户id。
PUBLIC_KEY是存储在db中的随机字符串,如果您在每次登录时重新生成它,可以进一步保护它,同时也要记住,它将不验证来自其他设备、浏览器的所有登录。因此,从本质上说,您只能一次从一个地方登录。
USER_DATA_SESSION_HASH_VERIFIER是由用户id、用户代理、当前ip地址、公钥、私钥组成的散列,它与盐类(令牌)混合在一起,将多次md5和sha1与最终的sha1或sha256哈希混合在一起。
因此,使用ID和PUBLIC_KEY,我选择用户和一些数据,比如私钥,重新生成哈希,并将其与USER_DATA_SESSION_HASH_VERIFIER匹配。请记住,在哈希中拥有当前ip将使用动态ip注销用户,如果他们重新启动互联网连接,这将有一个新的ip地址。在散列中混合用户代理将阻止其他用户在不同的浏览器上使用cookie。
现在,如果您为facebook这样的用户寻找类似会话管理的内容,那么您可以在其中混合一个会话标识符,并将会话标识符与数据库中该会话的唯一公钥存储在一起。
例如。1:asdfg:uss32:sha1_hash 1:GGGAS:2312:sha1_hash.这样,您就不能将asdfg键用于会话2312。
也许还有其他更好的实践,但对我来说,这似乎是一个非常好的解决方案。
发布于 2015-11-10 14:09:13
cookies是浏览器存储的,所以是的,它们可以创建cookie。您通常要做的是为user id设置cookie,为session hash设置另一个cookie(用户登录时随机生成的内容),并检查会话IP。
https://stackoverflow.com/questions/33631780
复制相似问题