我偶然发现WPF Password
es的PasswordBox
属性不能绑定安全性原因这一事实,这使得在MVVM上下文中使用它们非常麻烦。
像https://stackoverflow.com/a/1493330/3198247这样的答案表明,否则,密码可能会在运行时以明文形式存储在内存中,这可能是一个坏主意,因为它可能被恶意软件读取。
但是,我似乎仍然不理解一般或那个答案的原因。在那里,它说在客户端机器RAM上以明文形式保存密码是一种安全禁忌。。但是,一旦输入密码,密码就会在内存中,因为我可以从代码中访问密码。 那么为什么恶意软件无法直接从文本框中读取它呢?我在这里错过了另一个观点吗?
编辑:澄清,尤其是w /关于Sheridan的回答:假设PasswordBox
用户输入“pw”作为他的密码。然后,显然“pw”在内存中,因为我可以通过PasswordBox.Password
检索它。 为什么另外能够将它绑定到ViewModel的字符串属性是不安全的?然后,“pw”最多会包含在两个字符串中,但据我所知,这个不应该让它变得更安全。或者真的要“提醒”程序员PW的存储时间不应超过需要的时间吗?
答案 0 :(得分:1)
阅读此答案 Why is char[] preferred over String for passwords? 我知道这是java,但我相信同样的规则适用。但是,根据系统所需的安全级别,它应该足够了。始终是恶意软件获取信息的方式,例如键盘记录,但你只能这么做。
答案 1 :(得分:-1)
你 缺少某些东西。
普通密码永远不会存储在数据库中。相反,密码是加密的,然后存储在数据库中。当用户尝试登录时,他们会键入文本,您应立即加密并与数据库中的加密密码进行比较。
因此,我们从未在数据库中找到未加密的密码,或代码。