是否可以使用 File.Delete 或 File.Encrypt 来粉碎文件?还是这两个函数都不会覆盖磁盘上的实际内容?如果他们这样做了,这是否也适用于 SSD 的磨损均衡和其他存储的类似技术?或者我应该使用其他功能吗?我正在尝试改进一个开源项目,该项目当前以明文形式将凭据存储在一个文件中。由于它们总是写入该文件的原因(我不知道为什么 Ansible 这样做,但现在我不想触及那部分代码,可能有一些正当理由,为什么会这样,至少现在)然后我就可以删除那个文件了。那么使用 File.Delete 或 File.Encrypt 是否是清除磁盘信息的正确方法?编辑:如果只能使用本机 API 和 pinvoke,我也同意。我不仅限于 .net,还包括 C#。Edit2:提供一些上下文:明文凭据由ansible内部保存,因为它们作为在目标Windows主机上执行的模块的变量传递。该文件负责再次检索变量:https://github.com/ansible/ansible/blob/devel/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.Legacy.psm1#L287 https://github.com /ansible/ansible/blob/devel/lib/ansible/module_utils/csharp/Ansible.Basic.cs#L373
1 回答
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
File.Encrypt 有可能比 File.Delete(在这方面肯定什么都不做)更能帮助粉碎数据,但这不是可靠的方法。
在操作系统和硬件级别都有很多事情发生,这是与 .NET 代码分离的几个抽象层。例如,您的文件系统可能会随机决定移动它在磁盘上物理存储文件的位置,因此覆盖您当前认为文件所在的位置可能不会真正删除文件先前存储位置的痕迹。即使您成功地覆盖了文件的正确部分,磁盘本身也经常会有残留信号,可以被拥有合适设备的人拾取。一些文件系统并没有真正覆盖任何东西:它们只是在每次发生更改时添加信息,因此您总能及时找到磁盘在任何给定时间点的内容。
因此,如果您无法合法地阻止文件被保存,那么任何真正删除它的尝试都将是不完美的。如果您愿意接受不完美并且只想在某种程度上减轻问题的可能性,您可以使用您发现的策略尝试多次用垃圾数据覆盖文件并希望最好的结果。
但我不会很快放弃从源头上解决问题。例如,Ansible 的文档提到:
如果您不需要在每个主机的基础上生成随机密码,那么密码查找插件的一个很好的替代方案是在 playbook 中使用 Vault。阅读那里的文档并考虑先使用它,它对大多数应用程序来说更可取。
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消