我想提出一个WPF应用程序将处理大量的例如用户名,密码,电子邮件等,所有这些数据都显示在应用文本框和passwordboxes敏感数据。当应用程序关闭时,我需要删除内存中的所有数据,以便以后再检索它。安全问题在WPF应用程序
你能告诉我什么,我需要注意的是,或技术,我可以使用,使这个项目尽可能安全的一些准则或建议吗?
谢谢
我想提出一个WPF应用程序将处理大量的例如用户名,密码,电子邮件等,所有这些数据都显示在应用文本框和passwordboxes敏感数据。当应用程序关闭时,我需要删除内存中的所有数据,以便以后再检索它。安全问题在WPF应用程序
你能告诉我什么,我需要注意的是,或技术,我可以使用,使这个项目尽可能安全的一些准则或建议吗?
谢谢
这些数据将不会保留在内存中的程序执行结束后,但在理论上它可以在程序运行时读取。你可以尝试使用SecureString
S:http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx
此外,PasswordBox
控制已经使用SecureString
,使你在那一部分好。
.net字符串是不可变的,并且被实现。 不可变性使字符串在创建后不可更改。 实习使CLR使用具有相同内容的字符串的一个实例。 这也让它更难摆脱一个字符串。
从MSDN
..分配给拘留String对象的内存不是有可能被 释放,直到公共语言运行库(CLR)终止。 的原因是CLR对实体化字符串对象的引用在您的应用程序或您的应用程序域 终止后可能会持续存在 。
你可以使用SecureString,但它不是很方便,因为没有太多的WPF控件支持PasswordBox。
例如有些时候,你必须表明用户的密码,而无需转换SecureString的回一个正常的字符串,这是不可能的。这带来了我们制定的缓解问题。
所以,在我看来,WPF/C#不会对敏感数据的应用提供了良好的候选语言的框架。
请解释您为什么downvoted。这样每个人都会学到一些东西。 – Indy9000 2013-09-06 09:35:41
我认为你在担心一些不值得担心的事情。
如果有人对机器的物理访问,并希望窃取敏感信息,你已经输掉了比赛。
虽然用户名和密码可能不是当前在内存中,人可以只安装一个键盘记录器,并把它下一次运行应用程序。
数据是如何进入内存的?当可执行文件结束时,其内存将被释放。你有剪贴板中的数据吗?你是否将内存写入磁盘?你担心关键捕获吗?或者你有什么担心? – 2012-03-06 15:41:45
我正在用计时器清除剪贴板,并且没有数据写入磁盘,这不是一个问题。但是我已经在某处看到,存在于文本框中的数据可以保留在内存中。 – Aaron 2012-03-06 15:43:44
@mitte:仅在应用程序运行期间... – 2012-03-06 15:44:39