【发布时间】:2017-10-30 11:42:35
【问题描述】:
我有一个应用程序,它从 Windows 窗体文本框中获取一个字符串并将其传递给一个使用字符串作为参数的 API。我看到任务完成后,仍然可以从进程内存中查询到字符串。我遇到了使用SecureString 进行字符串内存管理功能的建议。但是,如果我理解正确,如果安全字符串是从字符串构建的,或者安全字符串的值最终存储在字符串中,那么字符串的目的就会失败。
请提出最佳解决方案。
【问题讨论】:
-
是否在线加密?如果没有,你为什么还要在内存中关注它?
-
任何参数都传递给执行堆栈上的方法。当方法完成时,执行堆栈点恢复到调用方法之前的位置。所以方法使用的任何变量仍然在堆栈上并且不可访问。调用方法必须在返回从堆栈中删除对象之前销毁变量。
-
如果它来自 WinForms
TextBox控件,则该字符串的副本数量已经未知/不可知,到处都潜伏着。您无法修复此泄漏。要么重新设计它以在整个过程中使用SecureString,要么接受对运行此代码的机器有足够访问权限的人可能从进程内存中读取此数据。但请记住 - 具有该级别访问权限的人无论如何都可以轻松安装键盘记录器。
标签: c# string securestring memory-dump