2012-03-06 89 views
2

我想提出一个WPF应用程序将处理大量的例如用户名,密码,电子邮件等,所有这些数据都显示在应用文本框和passwordboxes敏感数据。当应用程序关闭时,我需要删除内存中的所有数据,以便以后再检索它。安全问题在WPF应用程序

你能告诉我什么,我需要注意的是,或技术,我可以使用,使这个项目尽可能安全的一些准则或建议吗?

谢谢

+0

数据是如何进入内存的?当可执行文件结束时,其内存将被释放。你有剪贴板中的数据吗?你是否将内存写入磁盘?你担心关键捕获吗?或者你有什么担心? – 2012-03-06 15:41:45

+0

我正在用计时器清除剪贴板,并且没有数据写入磁盘,这不是一个问题。但是我已经在某处看到,存在于文本框中的数据可以保留在内存中。 – Aaron 2012-03-06 15:43:44

+1

@mitte:仅在应用程序运行期间... – 2012-03-06 15:44:39

回答

-1

.net字符串是不可变的,并且被实现。 不可变性使字符串在创建后不可更改。 实习使CLR使用具有相同内容的字符串的一个实例。 这也让它更难摆脱一个字符串。

MSDN

..分配给拘留String对象的内存不是有可能被 释放,直到公共语言运行库(CLR)终止。 的原因是CLR对实体化字符串对象的引用在您的应用程序或您的应用程序域 终止后可能会持续存在 。

你可以使用SecureString,但它不是很方便,因为没有太多的WPF控件支持PasswordBox。

例如有些时候,你必须表明用户的密码,而无需转换SecureString的回一个正常的字符串,这是不可能的。这带来了我们制定的缓解问题。

所以,在我看来,WPF/C#不会对敏感数据的应用提供了良好的候选语言的框架。

+0

请解释您为什么downvoted。这样每个人都会学到一些东西。 – Indy9000 2013-09-06 09:35:41

1

我认为你在担心一些不值得担心的事情。

如果有人对机器的物理访问,并希望窃取敏感信息,你已经输掉了比赛。

虽然用户名和密码可能不是当前在内存中,人可以只安装一个键盘记录器,并把它下一次运行应用程序。