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

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

>上载文件时,是否存储在临时目录(例如Windows Temp目录)中,如何清除其中的所有跟踪?
>文件的内容是否可以写入虚拟内存?如何确保文件的内容没有写入或删除内容?
>如果我加密文件,在文件加密之前,我是否还要担心将内容保存到Temp目录,虚拟内存或其他地方?
>我可以在所有关注的位置(临时,虚拟内存,任何其他位置)执行安全删除,我该怎么做?
>是否有任何我错过的担忧或实现既定目标的替代方法?

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

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

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

解决方法

磁盘安全性

您可以让擦除实用程序为您完成工作.

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

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

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

第二种方式是实现Guttman algorithm,但我认为使用别人的代码更便宜.

请记住,擦除非常耗费I / O,不要等待它完成,否则您可能会大大降低应用程序的速度.此外,在高负载的网站上,您可能会遇到明显的减速.

内存安全

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

您必须首先执行威胁分析,告诉您对内存的主要威胁是什么.以下是一些问题:

>有人可以使用具有执行内存转储功能的管理员/ root帐户访问服务器吗? (普通用户无法读取内存,.NET因为指针未被使用而阻止缓冲区溢出)
>有人可以物理访问服务器吗?你不相信你的托管服务提供商吗?您是否运行虚拟服务器?

如果答案不是肯定的,那么您不必担心内存安全问题

交换空间安全

即使你在Windows上运行,让我调用“交换”页面文件,或虚拟内存文件,或其他什么.您可能会考虑禁用它(确保您有足够的RAM),否则,您可能会考虑对其进行加密(但会导致性能下降).

但同样,为了让某人在运行时扫描您的交换文件,他必须是root用户,或者具有对关闭服务器的物理访问权限.

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

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

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...