Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 存储永久访问令牌和存储密码一样好吗?_Security_Authentication_Passwords - Fatal编程技术网

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

Security 存储永久访问令牌和存储密码一样好吗?,security,authentication,passwords,Security,Authentication,Passwords,如果我想持久化用户的登录,使他们即使在(比如)1年不活动后也不必重新登录,那么存储永久访问令牌与直接存储密码(可能是散列)一样好,因为(永久)访问令牌本质上是“备用密码”?存储访问令牌比存储密码或散列密码(总是可以尝试使用蛮力查找密码)更好,我认为您应该给令牌一个生命周期。虽然答案是肯定的,但也取决于您存储令牌的位置。您可能还希望使用XSRF/CSRF令牌以及令牌对用户进行身份验证 但是存储令牌比存储密码要好。存储访问令牌肯定比直接存储密码更安全,但让我们看看原因: 攻击者只能获取此令牌,但不能

如果我想持久化用户的登录,使他们即使在(比如)1年不活动后也不必重新登录,那么存储永久访问令牌与直接存储密码(可能是散列)一样好,因为(永久)访问令牌本质上是“备用密码”?

存储访问令牌比存储密码或散列密码(总是可以尝试使用蛮力查找密码)更好,我认为您应该给令牌一个生命周期。

虽然答案是肯定的,但也取决于您存储令牌的位置。您可能还希望使用XSRF/CSRF令牌以及令牌对用户进行身份验证


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

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

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

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

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

    • 它不可能是永久的

      密码的一个关键属性是它们不是常量,用户可以在密码被盗时更改密码,或者随着时间的推移更改密码。任何类型的令牌都应该没有什么不同,只是应用程序应该定期自动更改(旋转)它

    • 一定是散列了

      (使用强大的算法:bcrypt、scrypt、Argon-2I、PBKDF2;其他任何东西都是完全错误的)

      不要在任何地方以纯文本格式存储用户密码。即使保证用户不会在任何其他网站上使用此密码,纯文本密码意味着任何人只要掌握了数据库(即使是很短的一段时间),都可以劫持用户帐户。
      你有责任保护你的用户不受“黑客”的攻击,也要保护你自己

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

      你对问题的措辞意味着你会这样做。Cookie不是存储任何类型密码的安全位置。临时的、短期的令牌-当然,但不是密码


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

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


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

    “所有这些都是为了节省用户偶尔输入密码带来的小小不便——人们已经习惯了这一点;不值得冒安全风险。”我认为这与A)要求他们记住另一个密码有关,他们只会重复使用密码,这是不好的。B) 在数据库中存储另一个pw。在我看来,access令牌根本不应该存储在数据库中。它们应该只在内存中,当用户离开应用程序时,它会被删除。就个人而言,我不会将访问令牌存储在数据库中。只需将它们存储在内存中,并在用户注销或服务器重新启动时使其无效。