WPF PasswordBox中密码不可绑定的安全优势是什么?

3
我刚刚发现,由于安全原因,WPF PasswordBoxPassword属性不可绑定,这使得在MVVM上下文中使用它们非常麻烦。 https://dev59.com/8XM_5IYBdhLWcg3wMgAF#1493330等答案表明,否则,密码可能以明文形式存储在内存中,在运行时可能被恶意软件读取,这是一个很糟糕的想法。
然而,我仍然不明白一般的原因或该答案。在那里,它说:在客户端机器RAM中明文保存您的密码是不安全的。 但是,一旦输入密码,密码就在内存中,我可以从代码中访问它。 那么为什么恶意软件不能直接从文本框中读取它呢?我错过了另一点吗?
编辑:为了澄清,特别是 Sheridan 的回答:假设用户在PasswordBox中键入“pw”作为密码。那么,很明显,我可以通过PasswordBox.Password检索到“pw”。“为什么将其绑定到ViewModel的字符串属性会不安全?”然后,“pw”最多包含在两个字符串中,但就我所看到的,这应该不会使它更加安全或不安全。难道重点真的是“提醒”程序员不要将密码存储时间超过所需吗?

PasswordBox.Password绑定到字符串属性并不理想(就像一开始使用它并不理想一样),但将PasswordBox.SecurePassword绑定到SecureString不应该影响安全性。 - CodesInChaos
2
SecureString根本无法防止恶意软件攻击,它只能防止密码出现在交换文件和崩溃转储中。 - CodesInChaos
2个回答

1

请阅读这个答案为什么char[]比String更适合用于密码?。我知道它是Java,但我相信同样的规则也适用。但是,取决于您系统所需的安全级别,这应该已经足够了。总有恶意软件会获取信息,例如键盘记录,但您能做的只有那么多。


我认为有一种比使用char[]更好的方法。请查看 https://msdn.microsoft.com/de-de/library/system.security.securestring(v=vs.110).aspx - Noel Widmer

-1

缺少了一些东西。

明文密码永远不应该存储在数据库中。相反,密码被加密,然后存储在数据库中。当用户尝试登录时,他们键入的文本应立即加密并与数据库中的加密密码进行比较

因此,我们从未看到未加密的密码,无论是在数据库还是代码中。


我并没有谈论数据库或密码的存储。我实际上是在指从输入框获取密码之前的那个点。显然,在那一点上,密码需要在内存中,因为我没有明文就无法加密它。这一点真的只是为了a)让程序员感到非常烦恼,以至于他们基本上被迫寻找丑陋的解决方法(参见此案例的许多绑定助手类),还是b)通过使用户在需要时主动检索密码,尽可能短地保留明文密码? - anderas
1
我们这里讨论的不是数据库,而是内存。 - CodesInChaos
当您只需要使用密码来验证用户登录时,不应该在数据库中加密密码,而应该使用适当的密码哈希(bcrypt、scrypt、PBKDF2)进行哈希处理。您可以加密或混淆哈希,但这并没有什么用处,因为攻击者可以窃取数据库,很可能也能窃取密钥(除非您使用HSM)。 - CodesInChaos
这并没有真正帮助到任何方面。WPF PasswordBox控件无论如何都会以明文形式存储密码,这并不完全符合Sheridan所解释的“正确”方式。而且,我想在代码中根本没有不看到未加密/未散列密码的方法,因为用户必须能够输入它! - almulo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接