2013-12-08 139 views
3

我正在将后端服务器作为个人项目。目前,当有人注册时,他们的密码用Bcrypt散列,并保存在数据库中。但是,每次需要查询数据库时,都需要验证请求是否来自经过身份验证的用户,这似乎太多了。结果,我开始怀疑将这些内容缓存在服务器的内存中。我认为在这个内存中存储一​​个未散列的密码是不安全的。什么是最安全的方式来实现这一点?我可以缓存密码的Bcrypte'd副本,然后只验证用户的密码是否与缓存的Bcrypt副本相匹配,但是如果可以,我还想尽可能少地使用bcrypt。我假设将密码和Bcrypt'd版本一起存储在缓存中,即使未链接到用户名,也不是一个好主意。在保持安全性和性能的同时,我还能做些什么吗?在缓存中安全地存储密码哈希

+0

为什么每次查询数据库“太多”?考虑替代品是件好事,但它听起来像是在过度设计它。 – acfrancis

+0

我没有最好的硬件资源,并且如果可能的话,我想尽量减少数据库查询和执行的资源密集型作业的数量。但是,如果这完全危及安全,我会忍受它。 – User093203920

+0

我认为在缓存中存储哈希密码很好。存储明文密码不是。除非你有数据告诉你,否则我的默认建议总是先做最简单的事情(换句话说,忘记缓存并只查询数据库)。 – acfrancis

回答

0

缓存明文密码&其散列通常不是一个好主意。安全带来了成本,在这里你的表现。

如果您不需要一流的安全性(即较慢的散列),则可以使用基于SHA512的快速散列解决方案。

对于数据库性能,请尝试调整数据库缓存以加快检索速度。