存储永久访问令牌和存储密码一样好吗?

时间:2017-11-24 10:09:01

标签: security authentication passwords

如果我想坚持用户'登录,以便即使在1年不活动之后也不必重新登录,然后存储永久访问令牌与直接存储密码(可能是哈希),因为(永久)访问令牌基本上是"替代密码"?

4 个答案:

答案 0 :(得分:2)

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

  1. 攻击者只能获取此令牌,但不能获取原始密码。这样做更好,因为密码通常在其他网站上重复使用,和/或可以显示密码方案。 ➽确保令牌是随机的,而不是从密码中删除。
  2. 令牌不仅仅是另一个密码。虽然用户选择的密码通常较弱,但令牌非常强大。他们是如此强大,强奸是不切实际的。 ➽生成随机,足够长的令牌,它们应至少为20个字符a-z,A-Z,0-9。

答案 1 :(得分:1)

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

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

  • 不能永久。

    密码的一个关键属性是它们不是常量,用户可以在被盗时或其他时间更改密码。任何类型的令牌都应该没有什么不同,除非它应该由您的应用程序定期自动更改(轮换)。

  • 必须要哈希!

    (使用强大的算法:bcrypt,scrypt,Argon-2I,PBKDF2;其他任何事情都是错误的)

    不要在任何地方以纯文本格式存储用户密码。即使保证用户不在任何其他站点上使用此密码,明文密码也意味着任何掌握数据库的人(即使是短暂的时间)都可以劫持用户帐户。
    您有责任保护您的用户不仅免受“黑客”的侵害,还要保护您自己。

  • 请勿将其存储在Cookie中,即使经过哈希处理或加密也是如此。

    你说问题的方式意味着你会做这样的事情。 Cookie不是存储任何密码的安全位置。 临时的,短期的令牌 - 当然,但不是密码。

看起来您正在尝试设计自己的身份验证协议,这不是一件容易的事。它可能很容易使它工作,但这大约是工作的5%;这里有太多细节需要考虑。所有这一切,为了节省用户偶尔输入密码的轻微不便的微小好处 - 人们习惯了这一点;它不值得冒安全风险。

如果您一心想提供长期登录,我建议使用现有的身份验证协议。每个此类协议都使用加密签名,完全避免依赖用户密码,因此几乎完全消除了上述所有问题。

就个人而言,我只会允许所谓的“社交登录” - 通过Facebook,谷歌,Twitter。您根本不需要处理密码,任何人都可以通过单击按钮登录。

答案 2 :(得分:0)

最好存储一个访问令牌,而不是存储密码或哈希密码(总是可以尝试蛮力来查找密码),我认为你应该给一个令牌一辈子。

答案 3 :(得分:0)

虽然答案是肯定的,但它也取决于您存储令牌的位置。您可能希望使用XSRF / CSRF令牌以及令牌来授权用户。

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