【问题标题】:How is python-keyring implemented on Windows?python-keyring 如何在 Windows 上实现?
【发布时间】:2013-02-07 16:44:16
【问题描述】:

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

在 Linux 上的 GNOME/KDE 中,系统会提示用户输入其密码,以根据每个应用程序授权访问密钥环。

在 Windows 中,当应用程序访问密钥环时没有这样的提示。什么是阻止随机 python 应用程序通过运行从密钥环中检索密码

import keyring
get_password(service, username)

如何实施用户同意?整个概念(至少在 Windows 中)是否基于所有已安装程序都是“受信任”的假设?

【问题讨论】:

    标签: python windows security python-keyring


    【解决方案1】:

    稍微研究一下,密码似乎存储在 Windows Credential Vault 中,相当于 Gnome 或 KDE 密钥环。您实际上可以通过打开 Windows 凭据管理器查看已存储的那些。我只需在 Windows 8.1 的开始屏幕上输入 Credential Manager 即可到达那里,但我认为您也可以从用户帐户页面访问它。

    无论如何,从附图中可以看出,我作为测试添加到密钥环中的密码显示在Windows Credentials->Generic Credentials->keyring_demo 下。在 PC 上以其他用户身份打开此窗口不会显示此密码,因此它似乎对其他用户是安全的。此屏幕还允许您撤销或更改密码。

    关于如何实现同意,我相信只要你的 Windows 用户帐户登录,keyring 就会运行,但我不知道具体情况。

    【讨论】:

      【解决方案2】:

      凭证管理器方法有效,但在我的情况下添加:

      • 互联网或网络地址“myPassGroup”
      • 用户名“pass1”
      • 密码“xxx”

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

      • 互联网或网络地址“myPassGroup”
      • 用户名“pass2”
      • 密码“xxx”

      pass2 将 OVERRIDE 第一个入口 pass1! 这是一个主要缺点,因为“互联网或网络地址”是 作为密钥环中的组名,我需要将多个密码放在下面 同名

      我的解决方法是直接使用python命令

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

      您可以通过以下方式验证结果

      • keying.get_password("groupname", "passKey")
      • keying.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 上完美运行

      【讨论】:

      • 我相信它们存储在以下两个位置之一:C:\Users\username\AppData\Roaming\Microsoft\CredentialsC:\Users\username\AppData\Local\Microsoft\Credentials,但文件已加密。看看这个线程:serverfault.com/questions/770996/…
      【解决方案3】:
      from keyring.backend import KeyringBackend
      
      class SimpleKeyring(KeyringBackend):
          """Simple Keyring is a keyring which can store only one
          password in memory.
          """
          def __init__(self):
              self.password = ''
      
          def supported(self):
              return 0
      
          def get_password(self, service, username):
              return self.password
      
          def set_password(self, service, username, password):
              self.password = password
              return 0
      
          def delete_password(self, service, username):
              self.password = None
      

      【讨论】:

      • 这如何回答这个问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      相关资源
      最近更新 更多