python-keyring在Windows上的实现是什么?
python-keyring在Windows上是如何提供安全性的?
在Linux的GNOME/KDE环境中,当用户想要访问密码库时,系统会提示用户输入密码,以便每个应用程序都能获得授权。
而在Windows上,当一个应用程序访问密码库时,并不会出现这样的提示。那么,是什么阻止了一个随机的Python应用程序通过运行
import keyring
get_password(service, username)
来获取密码呢?用户的同意是如何实现的?在Windows上,这个概念是否完全基于所有安装的程序都是“可信任”的假设呢?
4 个回答
这段内容来自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.
凭据管理器的方法是有效的,但在我的情况下需要添加:
- 网络地址 "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上应该能完美运行。
经过一些研究,发现密码是存储在Windows的凭据库里,这个东西就像Gnome或KDE的钥匙串。你可以通过打开Windows凭据管理器来查看你存储的密码。我是在Windows 8.1的开始屏幕上输入Credential Manager
来找到它的,但我觉得你也可以从用户账户页面进入。
总之,从附带的图片可以看到,我测试时添加到钥匙串的密码显示在Windows Credentials
->
Generic Credentials
->
keyring_demo
下面。在电脑上以其他用户身份打开这个窗口时看不到这个密码,所以它似乎是对其他用户安全的。这个界面还允许你撤销或更改密码。
至于如何实现用户同意,我相信只要你的Windows用户账户登录,keyring
就会正常工作,但具体细节我就不太清楚了。