最近我已经问了几个关于PasswordBox
的问题,但是在我的问题核心上,我需要一种极其安全的方法来让用户输入非常敏感的信息到我的.Net应用程序中。
开箱即用,WPF PasswordBox
是获取密码或其他敏感信息的控件。出于安全考虑,它通过SecurePassword
属性提供了一个SecureString
对象,这对我来说足够安全。然而,我发现这个控件有一个主要缺陷——它有一个Password
属性,该属性是不安全的.Net字符串中的用户输入内容。
我想假设如果我从未在我的应用程序中访问Password
属性,则不会生成敏感信息的不安全版本并且不必进行垃圾回收。那很好。但是,由于保护字符串的安全形式的目的是使值免受可以读取.Net内存的窥视进程(我假设)的保护,因此相同的窥视恶意代码是否可以简单地查找挂在内存中的PasswordBox
并找到某种方法来访问Password
字段,使SecureString
值的使用基本无效?
我承认,我不知道这些漏洞是如何执行的。但是,如果问题是某个应用程序可能在.Net内存管理器/垃圾收集器中嗅探您的变量,那么对我来说似乎很有道理,他们只需要访问PasswordBox
控件对象,而不是内存中的字符串对象,并简单地访问Password
属性。我在这个难题中漏掉了什么?如果PasswordBox
包含明文的Password
属性,它又怎么算是安全的呢?