对网站实施“记住我”的最佳方法是什么? [关闭]

我希望我的网站上有一个复选框,用户可以单击它,这样他们每次访问我的网站时都不必登录。 我知道我需要在他们的计算机上存储cookie才能实现此目的,但是该cookie中应包含什么?

另外,是否有一些常见的错误需要提防,以防止此Cookie出现安全漏洞,而在仍然提供“记住我”功能的情况下可以避免该错误?


#1楼

存储他们的UserId和RememberMeToken。 当他们使用“记住我”身份登录时,将生成一个新的“ RememberMeToken”(使其他所有标记为“记住我”的计算机无效)。

当他们返回时,请通过“记住我”令牌进行查找,并确保UserId匹配。


#2楼

我将存储一个用户ID和一个令牌。 当用户返回该站点时,将这两部分信息与诸如数据库条目之类的持久性内容进行比较。

至于安全性,请不要在其中放任何东西,以免有人修改Cookie以获得额外的好处。 例如,不要存储其用户组或密码。 不能修改任何会破坏您安全性的内容都不应存储在cookie中。


#3楼

改进的持久登录Cookie最佳做法

您可以使用此处描述为最佳实践的策略(2006)或此处描述的更新策略 (2015):

  1. 当用户在选中“记住我”的情况下成功登录时,除了标准会话管理cookie外,还会发出一个登录 cookie。
  2. 登录cookie包含系列标识符和令牌 。 系列和令牌是来自适当大空间的不可猜测的随机数 。 两者都存储在数据库表中, 令牌被散列 (sha256可以)。
  3. 当非登录用户访问站点并显示登录cookie时,将在数据库中查找系列标识符。
    1. 如果存在系列标识符 ,并且令牌的哈希与该系列标识符的哈希匹配,则认为用户已通过身份验证 。 生成一个新令牌 ,该令牌的新哈希存储在旧记录上,并向用户发布一个新的登录cookie(可以重新使用系列标识符 )。
    2. 如果存在该系列但令牌不匹配,则认为是盗窃 。 用户收到措辞强烈的警告,并且删除了用户记住的所有会话。
    3. 如果用户名和系列不存在,则登录cookie被忽略

这种方法提供了深度防御。 如果有人设法泄漏数据库表,它就不会给攻击者敞开大门来冒充用户。


#4楼

我自己调查持久性会话,我发现这根本不值得承担安全风险。 如果绝对必要,请使用它,但是您应该考虑仅对这种会话进行弱认证,并对可能对攻击者有价值的任何事情强制进行新的登录。

原因当然是包含持久会话的cookie很容易被盗。

窃取Cookie的4种方法( 根据Jens Roland@splattne页面上的@splattne基于他的回答):

  1. 通过不安全的线路拦截(数据包嗅探/会话劫持)
  2. 通过直接访问用户的浏览器(通过恶意软件或对该框的物理访问)
  3. 通过从服务器数据库读取它(可能是SQL Injection,但可以是任何东西)
  4. 通过XSS黑客(或类似的客户端漏洞利用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值