WPF应用程序中的安全问题

时间:2012-03-06 15:39:11

标签: c# wpf

我正在制作一个WPF应用程序,它将处理许多敏感数据,如用户名,密码,电子邮件等。所有这些数据都显示在应用程序的文本框和密码框中。当应用程序关闭时,我需要删除内存中的所有数据,以便以后没有人可以检索它。

您能告诉我一些关于我需要注意什么的指导或提示,或者我可以用来使这个项目尽可能安全的技术吗?

谢谢

3 个答案:

答案 0 :(得分:3)

程序执行结束后,数据不会保留在内存中,但理论上可以在程序运行时读取。您可以尝试使用SecureString s:http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx

此外,PasswordBox控件已使用SecureString,因此您对该部分表现不错。

答案 1 :(得分:1)

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

如果某人有机会访问该机器并想窃取敏感信息,那么您已经输掉了游戏。

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

答案 2 :(得分:0)

.Net字符串是不可变的和实体的。 不变性使得字符串在创建后不可更改。 Interning使CLR使用具有相同内容的字符串的一个实例。 它也使得摆脱字符串变得更加困难。

来自MSDN

  

..为interned String对象分配的内存不太可能   发布,直到公共语言运行库(CLR)终止。该   原因是CLR对interned String对象的引用可以   在您的申请,甚至您的申请域之后坚持,   终止。

你可以使用SecureString,但它不是很方便,因为除了PasswordBox之外没有多少WPF控件支持它。

例如,有时您必须向用户显示密码,但不将SecureString转换回普通字符串,这是不可能的。这带来了我们为缓解而设置的问题。

所以在我看来,对于有敏感数据的应用程序,WPF / C#不是一个好的候选语言框架。