Python:保护脚本中的敏感变量内容

时间:2015-10-02 21:46:25

标签: python security passwords

我需要用户在我的脚本中输入他们的密码,以便我可以使用该密码在他们的帐户上执行LDAP操作。这很简单:

password = getpass.getpass()    
ldapconn.simple_bind_s(binddn, password)

即使密码永远不会离开脚本并且永远不会以纯文本显示,它是否仍然容易受到类似内存转储的影响?在脚本中保护此密码的最佳方法是什么,但仍然可以使用它?

这篇文章很有意思:https://security.stackexchange.com/questions/29019/are-passwords-stored-in-memory-safe

主要是因为答案证实我怀疑存储在RAM中的密码不安全。我的问题是,一个人应该如何做需要将敏感信息存储在RAM中的工作?该帖子上没有人真正发布实际的实际解决方案,只是很多确认和详细说明为什么RAM不安全。使用上面的LDAP连接的简短示例,您可以进行哪些具体更改以更好地保护密码变量?

1 个答案:

答案 0 :(得分:0)

  

使用上面的LDAP连接的简短示例,您可以进行哪些具体更改以更好地保护密码变量?

无。你要么:

  • 需要将纯文本发送到LDAP API,
    • 在这种情况下,您需要拥有攻击者可以获得的纯文本
    • 或者您需要解密的加密文本,攻击者在解密后可以获得该文本
  • 需要密码哈希才能发送到LDAP API
    • 然后攻击者可以获取哈希并使用它。那时它实际上是一个普通的密码。

存在的解决方案是设计不涉及提示用户输入密码,并且不涉及向其他服务发送纯文本密码。

e.g。您有一个正常工作的Kerberos环境,具有同步时间,用户首次登录时获取Kerberos票证,以及这些票证用于在没有密码提示的情况下对服务进行身份验证。门票的有效期有限,并且内置了Kerberos重播detection,因此如果从内存中获取它们,则它们的密码远不如密码。

因此,用户针对整个环境点击一次密码提示,而不是针对他们运行的每个脚本或他们访问的服务点击一次,并且该密码由一个集中的,经过良好审核的低级操作系统进程处理。