【问题标题】:How to avoid storing password in Python code如何避免在 Python 代码中存储密码
【发布时间】:2015-06-11 15:49:43
【问题描述】:

我需要使用密码登录服务 我需要在 Python 中做一些事情,但我不想将密码存储在代码中。

我做了一些研究,发现了 base64 编码。这看起来不错,但无论如何它都需要将密码存储在代码中。

>>> import base64
>>> encoded = base64.b64encode('data to be encoded') # password stored in the code
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'

对于已经在 Python 中使用过密码管理的人来说,最好的选择是什么?将密码存储在文件中?只使用生成的b64encode() 字符串并在程序每次需要密码时对其进行解码?

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/12042724/…
  • 向用户询问密码并将其哈希值存储在数据库中....否则您需要以某种方式存储它...我喜欢使用看起来像 ascii 字符串的 base64string 和base64 将其解码为密码字节字符串 ....
  • 我需要使用密码登录服务你能详细说明这部分吗?
  • 此代码仅供您自己使用,还是您将分发它?我为后者使用的一个选项是允许用户创建一个本地文件来存储凭据(包括密码,如果他们愿意的话),然后要求他们在运行时输入他们不想存储在该文件中的任何内容-时间。然后从存储库中排除我的该文件版本。
  • 没有好办法。您可以以某种加密格式存储密码(例如您的base64),但您还必须在源代码中包含如何解密,那么有什么意义呢?我只需要通读您的 'ZGF0YSB0byBiZSBlbmNvZGVk'data = base64.b64decode(encoded) 示例,我就可以轻松恢复纯文本。

标签: python passwords base64


【解决方案1】:

我只能假设您是在谈论将您的凭据存储到网站,用户无法为自己注册?

最正确的方法是不这样做。在程序中存储凭据通常不是很安全,想要(并且知道如何)的人将能够获得这些凭据

对于避免将凭据存储在代码中的解决方案,您可以创建一个中间件服务器来存储用户注册的各个用户凭据,然后将您的站点凭据存储在该服务器上,以便用户点击中间件中的端点,然后使用您的登录凭据对站点进行查询并逐字返回输出。然而,这也是一个相当困难的解决方案。但是,如果您将其分发给不受信任的用户,并且您认为保护第 3 方凭据非常重要,那么这确实是您唯一的选择。

另一种选择是允许用户直接在第 3 方站点注册他们自己的用户名/密码(您甚至可以将其自动化),然后提示用户输入他们的唯一凭据并将其存储在用户主目录中或一些东西(如果你想加密/编码......)

根据您的修改,我认为以下内容可能适用于您的用例 如果您将其分发给一个非常小的受信任组,或者您找到了一种不用太在意人们是否从程序中获取凭据的方法,那么有很多方法可以在代码本身中对您的密码进行编码/加密/混淆。包括base64encoding它,或者aes加密它,把它分成几个地方。所有这些都将阻止人们扫描密码以获取密码的最常见方式(但有决心的人肯定能够恢复它)

【讨论】:

  • 您的回答很有帮助。谢谢。
【解决方案2】:

请勿在您的程序中嵌入密码(明文或模糊)。相反,允许用户在文件中提供密码。这是标准 FTP 和 MySQL 客户端等程序所采用的方法。

要获得奖励积分,请检查文件是否不能被其他非 root 用户读取(最好不要写入或替换)。如果是这样,则退出并显示错误消息,以便用户必须修复它。

请注意,您将在内存中有一个有价值的密码 - 考虑在使用后尽快覆盖,这样它就不会出现在任何核心文件中。

如果您的平台有合适的密钥环实现,您可以考虑使用 Python keyring 包。

【讨论】:

  • 如何覆盖内存中的密码?
  • 在 Python 中,很难确定内存中没有密码副本。这是 C 获胜的一种情况,因为您可以在不再需要密码时简单地 memset() 存储。
猜你喜欢
  • 2013-02-25
  • 1970-01-01
  • 2010-11-29
  • 2010-09-07
  • 2015-04-10
  • 1970-01-01
  • 2021-03-16
  • 2023-03-10
  • 2019-12-05
相关资源
最近更新 更多