gpt4 book ai didi

c# - 在 session 中存储散列密码是不可取的吗?

转载 作者:行者123 更新时间:2023-11-30 14:13:36 25 4
gpt4 key购买 nike

在(服务器端) session 中的用户对象中存储哈希密码是否不可取?不言而喻,需要在某个时候检索经过加盐和散列处理的密码,以比较散列值以验证给定用户的身份,但是一旦进行了比较,将其保存在用户对象中是否存在可量化的安全风险?


鉴于评论中的讨论,问题的要点是密码和哈希数据将与其余用户数据一起存储在用户对象中,一旦从数据库中检索到一个单一的、干净的调用。我在发布问题之前了解到,当然存在风险,但它是否足够可行以保证实现一个框架以从用户那里清除它,或者这样做是否只是一种良好做法?


根据反馈,我认为最好的解决方案是拥有一个包含密码和盐的凭据对象,该对象通过 ID 与用户相关联但不直接存储在其中。

当用户尝试登录时,将通过电子邮件/用户名从数据库中检索用户对象(不包含密码数据)。然后读取 ID 并将其用于检索关联的凭证对象。然后可以进行密码验证。如果密码正确,用户将进入 session 并销毁凭据对象。

结果是一个没有密码数据的用户对象,因此可以避免任何潜在的相关安全风险(如问题中所讨论的那样,无论它们多么小)。另一个结果是在使用之前无需手动清除用户对象的密码数据。这是一个比要求每次都清除数据更可靠的系统,如果使用 EF 或类似技术,则不会在将对象的更改推送到数据库时意外删除密码数据。

最佳答案

我个人认为没有任何理由不这样做。如果加盐哈希是安全的,那么将其存储在服务器端 session 中的安全性应该不会低于将其存储在数据库中的安全性。

毕竟,使用良好的加盐哈希的全部意义在于,即使您的数据库遭到破坏并且有人获得了所有加盐哈希,他们仍然无法恢复实际密码。

关于c# - 在 session 中存储散列密码是不可取的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13828259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com