c# - 如何从内存中删除带密码的文本框?
问题描述
我有简单的登录表单。
用户获得数字密码后,我需要将文本框销毁到内存中。
这样做就足够了吗?
txtPassword.Text = string.Empty;
txtPassword = null;
System.GC.Collect();
解决方案
我想你可能对SecureString感兴趣
System.String 类的实例是不可变的,并且在不再需要时,不能以编程方式安排垃圾回收;也就是说,实例创建后是只读的,无法预测实例何时会从计算机内存中删除。因为 System.String 实例是不可变的,所以看似修改现有实例的操作实际上会创建它的副本以进行操作。因此,如果 String 对象包含密码、信用卡号或个人数据等敏感信息,则存在使用该信息后可能会泄露的风险,因为您的应用程序无法从计算机内存中删除数据。
SecureString 对象与 String 对象的相似之处在于它具有文本值。但是,SecureString 对象的值被固定在内存中,可以使用底层操作系统提供的保护机制,例如加密,可以修改直到您的应用程序将其标记为只读,并且可以从计算机内存中删除通过您的应用程序调用 Dispose 方法或通过 .NET Framework 垃圾收集器。
推荐阅读
- c# - 在多宿主 Windows 10 计算机上接收 UDP 多播消息
- docker - 未知:访问被拒绝:频道 [] creator org [Org1MSP] - docker-compose 中的 Hyperledger
- office365 - Office 加载项中的拖放功能
- python - 将 django 过滤器编译成变量并在运行时执行?
- javascript - 在不刷新网页的情况下为进度条设置动画
- sql - Sql 触发器在可以引用之前更新表
- string - 在 Alteryx 中将填充字符串转换为固定十进制
- rest - 验证 REST API 的 HTTP POST 请求正文
- python - 测试 Django-Rest 自定义字段
- python - python,找到两个不相等列表之间的区别