【发布时间】:2014-04-26 00:57:33
【问题描述】:
我刚刚偶然发现 WPF PasswordBoxes 的 Password 属性出于安全原因不可绑定,这使得在 MVVM 上下文中使用它们非常麻烦。
像https://stackoverflow.com/a/1493330/3198247 这样的答案表明,否则,密码可能会在运行时以纯文本形式存储在内存中,这是一个坏主意,因为它可能会被恶意软件读取。
但是,我似乎仍然不明白一般原因或答案。在那里,它说将您的密码以纯文本形式保存在客户端计算机 RAM 上是安全禁忌。。但是,密码一输入就在内存中,因为我可以从代码中访问它。 那么为什么恶意软件不能直接从文本框中读取呢?我在这里错过了另一点吗?
编辑:澄清,特别是。关于 Sheridan 的回答:假设 PasswordBox 用户键入“pw”作为他的密码。然后,显然“pw”在内存中,因为我可以通过PasswordBox.Password 检索它。 为什么另外能够将它绑定到 ViewModel 的字符串属性是不安全的? 然后,“pw”最多包含在两个字符串中,但据我所知,这个不应使其或多或少安全。还是真的要“提醒”程序员不要将 PW 存储的时间超过需要的时间?
【问题讨论】:
-
将
PasswordBox.Password绑定到字符串属性并不理想(就像首先使用它并不理想),但将PasswordBox.SecurePassword绑定到SecureString不应该损害安全性. -
SecureString根本无法防范恶意软件,它只会防止密码出现在交换文件和故障转储中。