正在存储永久访问令牌与存储密码一样好



如果我想坚持使用用户的登录名,以便他们即使在不活动的1年之后也不必重新登录,那么存储一个永久访问令牌与存储一样好密码直接(也许是哈希),因为(永久)访问令牌本质上是"替代密码"?

存储访问令牌肯定比直接存储密码更安全,但让我们看看为什么:

  1. 攻击者只能获取这个令牌,而不能获得原始密码。这是更好的,因为密码通常在其他站点上重复使用,并且/或可以揭示密码方案。➽确保令牌是随机的,并且不会从密码中删除。
  2. 令牌不仅是另一个密码。尽管用户选择的密码通常很弱,但令牌非常强。它们是如此强大,以至于野蛮人是不切实际的。➽产生随机的,足够长的令牌,它们应该至少为20个字符A-Z,A-Z,0-9。

一般来说,是的。,有很多警告。

由csprng 生成的长,随机令牌,(这非常重要,有不同的方法来生成"随机"字符串,而不是所有的字符串)密码 - 是的。但是,您打算使用此令牌的方式意味着它本身就是一个密码,这意味着适用相同的标准:

  • 它不能是永久的。

    密码的关键属性是它们不是常数,并且用户可以在被盗或随着时间的流逝而更改密码。任何类型的令牌都不应有不同,除非应按照定期的间隔自动更改(旋转)。

  • 必须进行哈希!

    (使用强算法:bcrypt,scrypt,argon-2i,pbkdf2;其他任何事物都是错误的)

    永远不要以普通文本格式存储用户密码。即使可以保证用户在任何其他网站上都不使用此密码,平面文本密码也意味着任何将自己的人转到数据库(即使短暂时间)的人,也可以劫持用户帐户。

    您有责任不仅保护用户免受"黑客"的侵害,还可以免受自己的侵害。

  • 即使是哈希或加密,也不要将其存储在cookie中。

    您措辞问题的方式意味着您会做这样的事情。cookie不是存储任何形式密码的安全位置。临时的,短暂的令牌 - 当然,但不是密码。

看来您正在尝试设计自己的身份验证协议,这不是一件容易的事。使其工作可能很容易,但这大约是工作的5%。有太多细节要考虑。所有这些,为了使用户偶尔打字给他们的密码的小小不便带来微小的好处 - 人们已经习惯了这一点;不值得安全风险。

如果您在提供长寿命登录方面陷入困境,我建议使用现有的身份验证协议。每个这样的协议都用于加密签名,避免完全依赖用户密码,从而几乎完全消除了上述所有问题。

就个人而言,我只允许通过Facebook,Google,Twitter允许所谓的"社交登录"。您根本不必处理密码,任何人都可以单击一个按钮登录。

最好存储一个访问令牌,而不是存储密码或哈希密码(始终可以尝试使用蛮力来查找密码),我认为您应该给一个令牌介绍一生。

尽管答案是肯定的,但这也取决于您存储令牌的位置。而且您可能需要与令牌一起使用XSRF/CSRF代币授课。

但是存储令牌比存储密码更好。

相关内容

最新更新