python-keyring在Windows上的实现是什么?

22 投票
4 回答
33063 浏览
提问于 2025-04-17 15:07

python-keyring在Windows上是如何提供安全性的?

在Linux的GNOME/KDE环境中,当用户想要访问密码库时,系统会提示用户输入密码,以便每个应用程序都能获得授权。

而在Windows上,当一个应用程序访问密码库时,并不会出现这样的提示。那么,是什么阻止了一个随机的Python应用程序通过运行

import keyring
get_password(service, username)

来获取密码呢?用户的同意是如何实现的?在Windows上,这个概念是否完全基于所有安装的程序都是“可信任”的假设呢?

4 个回答

0

这段内容来自python-keyring的GitHub页面,我想在Windows上也可能会有类似的担忧,就像在MacOS上一样,不过网站上说还没有进行分析。

安全考虑

每个内置的后端在使用这个库之前,都可能有一些安全方面的注意事项需要了解。使用keyring的工具或库的作者们被鼓励去考虑这些问题。

就像任何已知的安全问题列表一样,这个列表并不是全部。可以根据需要添加更多的问题。

macOS Keychain
        Any Python script or application can access secrets created by keyring from that same Python executable without the operating system prompting the user for a password. To cause any specific secret to prompt for a password every time it is accessed, locate the credential using the Keychain Access application, and in the Access Control settings, remove Python from the list of allowed applications.
1

凭据管理器的方法是有效的,但在我的情况下需要添加:

  • 网络地址 "myPassGroup"
  • 用户名 "pass1"
  • 密码 "xxx"

然后再用相同的网络地址添加另一个条目:

  • 网络地址 "myPassGroup"
  • 用户名 "pass2"
  • 密码 "xxx"

这时候,pass2会覆盖第一个条目pass1!这真是个大问题,因为“网络地址”在密码管理器中充当组名,我需要在同一个名字下放多个密码。

我的解决方案是直接使用Python命令:

  • 在Windows中打开CMD
  • 输入Python
  • 然后输入 import keyring
  • 接着输入 keyring.set_password("groupName", "passKey", "password")
  • 再输入 keyring.set_password("groupName", "passKey2", "password2")

你可以通过以下方式验证结果:

  • 输入 keyring.get_password("groupname", "passKey")
  • 输入 keyring.get_password("groupname", "passKey2")

我知道这样是可行的,但仍然在努力找出实际数据保存在哪里。

我使用了以下命令来尝试找出:

  • python -c "import keyring.util.platform_; print(keyring.util.platform_.config_root())"

  • python -c "import keyring.util.platform_; print(keyring.util.platform_.data_root())"

在我的情况下,data_root是 "C:\Users\JunchenLiu\AppData\Local\Python Keyring"。我检查了这个文件夹,但它并不存在……它一定是保存在某个地方。也许有人能搞清楚。

不过我的解决方案在Windows上应该能完美运行。

30

经过一些研究,发现密码是存储在Windows的凭据库里,这个东西就像Gnome或KDE的钥匙串。你可以通过打开Windows凭据管理器来查看你存储的密码。我是在Windows 8.1的开始屏幕上输入Credential Manager来找到它的,但我觉得你也可以从用户账户页面进入。

总之,从附带的图片可以看到,我测试时添加到钥匙串的密码显示在Windows Credentials -> Generic Credentials -> keyring_demo下面。在电脑上以其他用户身份打开这个窗口时看不到这个密码,所以它似乎是对其他用户安全的。这个界面还允许你撤销或更改密码。

Windows credential manager

至于如何实现用户同意,我相信只要你的Windows用户账户登录,keyring就会正常工作,但具体细节我就不太清楚了。

撰写回答