如何确保使用后无法恢复上传的文件内容?

Laz*_*Laz 6 asp.net security upload file-upload web-applications

我想使用上传到Web服务器的文件内容不可恢复.我担心的是:

  1. 上传文件时,它是否存储在临时目录(例如Windows Temp目录)中,如何从那里清除所有痕迹?

  2. 是否可以将文件内容写入虚拟内存,如何确保文件内容写入或删除内容?

  3. 如果我加密文件,在文件加密之前,我是否还要担心内容被保存到Temp目录,虚拟内存或其他地方?

  4. 我可以在所有关注的位置(临时,虚拟内存,任何其他位置)执行安全删除,我该如何做?

  5. 是否有任何我错过的担忧或实现既定目标的替代方法?

注意:这是一个ASP.NET Web应用程序.

编辑:感谢djeeg's指出如何将临时上传目录重新定位到更可控的东西的链接.

关于其他要点的任何反馈?

usr*_*ΛΩΝ 3

磁盘安全

您可以让擦除实用程序为您完成这项工作。

如果您在 Mono/Linux 上运行 ASP.NET,则可以wipe通过类使用该命令Process(确保已安装擦除包)。

如果您运行 Windows,方法是相同的。wipe.exe当您需要安全地处理文件时,请使用执行硬清理的实用程序。

我喜欢这个网站,它分发了免费的wipe.exe,它不包含在Windows 标准安装中(太糟糕了)。

第二种方法是实现Guttman 算法,但我认为使用别人的代码更便宜。

请记住,擦除是 I/O 密集型操作,不要等待它完成,否则可能会显着减慢应用程序的速度。此外,在高负载网站上,您可能会遇到明显的速度减慢的情况。

内存安全

该类SecureString可以帮助您在内存中不留下任何字符串痕迹。但是当您处理文件时,您实际上是在处理流。我不确定是否担心易失性内存的内容(即使您处理维基解密文档)。

您必须首先执行威胁分析,告诉您内存面临的主要威胁是什么。这里有一些问题:

  1. 有人可以使用具有执行内存转储能力的管理员/root 帐户访问服务器吗?(普通用户无法读取您的内存,并且 .NET 由于未使用指针而防止缓冲区溢出)
  2. 有人可以物理访问服务器吗?您还不够信任您的托管提供商吗?您运行虚拟服务器吗?

如果答案是否定的,您不必担心内存安全

交换空间安全

即使您在 Windows 上运行,我也可以将页面文件、虚拟内存文件或其他文件称为“交换”。您可能会考虑禁用它(确保您有足够的 RAM),或者,您可能会考虑对其进行加密(但性能会下降)。

但同样,为了让某人在运行时扫描您的交换文件,他必须是 root,或者能够物理访问已关闭的服务器。

如果数据太敏感,我会禁用交换。

[添加] 我确定您已经使用 SSL 来上传文件,以防万一您忘记了一些原则...