>上载文件时,是否存储在临时目录(例如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上传文件,以防您忘记了一些原则……