【发布时间】:2019-06-29 07:21:49
【问题描述】:
是否可以使用 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
【问题讨论】:
-
我认为不赞成票的原因可能是这种情况存在一个更根本的问题,即以纯文本形式存储凭证而不考虑推理通常是一个非常糟糕的主意。也就是说,如果您想摆脱它,只需使用
File.Delete。你能解释一下你为什么考虑使用File.Encrypt吗?提供一些关于为什么凭证存储为纯文本的上下文也可能会有所帮助,因为这可能暗示了一个更简单的幕后问题。 -
File.Encrypt 对文件进行加密,因此库中可能有一些特殊处理来清除明文。所以我可以做
File.Encrypt(path); File.Delete(path)。是的,我也知道以明文形式存储凭据是不好的,但我不明白为什么人们只想让这些问题保持沉默……改变这一点并不总是由你决定,甚至可能有很好的理由是这样的…… -
File.Delete 会将明文保留在磁盘上的某个位置。在 SSD 上也可以覆盖它。也许使用 File.Encrypt 并不太疯狂。
-
我不太确定
File.Encrypt是否真的将明文从磁盘上切掉了。它在逻辑层面已经到位,但它的内部实现并没有对物理层面做出任何承诺。特别是在 SSD 上,没有办法真正确保内容被擦除。我会考虑用垃圾覆盖文件(不要费心加密,只要随机或零就可以了),你就完成了,尽可能多。
标签: c# .net .net-standard-2.0