这种形式的密码缓存安全吗?

问题描述 投票:0回答:1
if user_info is None:
    return None

correct_password = user_info["pw_bcrypt"].encode()

if correct_password in state.cache.bcrypt:
    if password_to_check != state.cache.bcrypt[correct_password]:
        return None

else:
    if not bcrypt.checkpw(password_to_check, correct_password):
        return None

    state.cache.bcrypt[correct_password] = password_to_check

值得注意的是,输入的密码是md5加密的,因此缓存中没有存储明文密码,虽然我知道md5对于密码加密来说不是个好主意,但这不取决于我,而是发送md5加密的osu客户端的构造服务器密码。

python security caching bcrypt
1个回答
0
投票

您提供的代码似乎是使用 bcrypt(一种常见且安全的密码哈希算法)实现密码缓存。让我们分解一下步骤:

对正确密码进行编码:对从 user_info["pw_bcrypt"] 检索到的正确密码进行编码。

检查缓存中的密码:如果在缓存(state.cache.bcrypt)中找到编码后的密码,则代码将检查要检查的密码是否与缓存中存储的密码匹配。

使用 bcrypt 检查密码:如果在缓存中找不到编码的密码,则代码使用 bcrypt 的 checkpw 函数检查提供的密码是否与正确的密码匹配。

更新缓存:如果密码验证成功且在缓存中未找到,则将密码添加到缓存中以供将来使用。

这种方法对于密码缓存来说通常是安全的:

它使用 bcrypt 进行密码哈希,这是一个安全的选择。 它使用安全比较功能 (checkpw) 来比较密码。 它在缓存中仅存储哈希密码,而不是明文密码。 不过,有一些注意事项需要牢记:

缓存安全:确保 state.cache.bcrypt 得到正确保护。如果攻击者获得对缓存的访问权限,他们可能会检索哈希密码,尽管他们仍然需要破解 bcrypt 哈希值才能获取明文密码。

缓存大小和管理:谨慎对待缓存的大小和管理。如果缓存遭到破坏,在内存中存储太多密码可能会导致性能问题或潜在的安全风险。

过期和刷新:考虑实施缓存过期或刷新机制,以降低使用过时数据进行身份验证的风险。

总体而言,虽然该方法看起来总体上是安全的,但必须考虑应用程序安全架构的更广泛背景并确保采取适当的保护措施。

© www.soinside.com 2019 - 2024. All rights reserved.