这个web应用程序将有一个数据库表,列有uniqueid (64位int自动增量字段;key)、令牌(64字节二进制字段)和一个accountid。
使用“记住我”登录后,将生成一个随机令牌。然后,将此令牌的SHA-512散列插入数据库,并检索生成的uniqueid。包含唯一和未散列令牌的cookie被发送到客户端。
每次用户使用cookie访问页面时,cookie的唯一性及其令牌的SHA-512散列都会根据数据库进行检查。如果有一行与唯一性匹配,而该行的令牌哈希与令牌哈希匹配,则使用该行的accountid登录用户。cookie每次尝试身份验证之后,删除使用旧的uniqueid的行,如果身份验证成功,则生成一个新的随机令牌。然后,将此令牌的SHA-512散列插入数据库,并检索生成的uniqueid。包含唯一和未散列令牌的cookie被发送到成功验证的客户端。
我也将使用所描述的这里技术。所有失败的cookie身份验证都会将cookie设置为空白值和过期日期,设置为过去的某个时间。
我相信这种方法可以解决一些有关cookie的问题。即:
我可以通过允许用户指定他/她想要被记住的时间来进一步增强安全性。过期日期将存储在存储唯一in和令牌的同一个数据库表中。每次创建新cookie时,此过期时间都将随cookie一起发送。如果用户尝试使用服务器认为过期但客户端仍然持有的cookie登录,则将拒绝登录。
我相信这个解决方案是相当安全的,但是当我设计这个方法时,是否有我忽略的缺陷或事情呢?
资料来源:
发布于 2012-10-20 16:36:04
说到安全,合理总是相对的。::如果你认为相对于你所面临的威胁来说,这是合理的。尽管如此,如果它是我的应用程序,我会做一些事情,我相信我实际上需要保护它免受攻击……
当然,你还可以做更多的事情,这只是一个开始的清单.
https://stackoverflow.com/questions/12989778
复制相似问题