在过去,许多应用程序都在Temp / Tmp目录中存储了临时文件; 系统或用户特定的。 最近虽然我们在企业中有许多用户使用Temp目录,但由于病毒扫描工具或主机入侵防护工具和策略不允许使用这些位置,因此这些用户被阻止。 我认为这里的恐惧是多个应用程序可以从该位置读取和写入,所以stream氓应用程序可能会对另一个应用程序或其临时存储的数据产生负面影响。 这似乎是一个正确和更安全的运作方式,所以我不能要求人们开始允许增加风险。
我的问题是如何/在哪里(物理)安全地存储用户特定的,应用程序特定的,但临时文件。
应该预计每个应用程序自己pipe理,还是有一些新的应用程序和用户沙箱临时数据存储function,我不知道?
具体来说,我专注于使用.NET 4.0 +,C#和Windows 7 +,但这个问题也应该适用于Windows上使用的其他语言。
类似,但较老,不够具体的线程
encryption内容和文件名称的答案似乎不是最佳实践解决scheme,并且仍然会被主机入侵防御系统阻止。
根据MS准则, ApplicationData
目录确实是存储应用程序特定文件(包括临时文件)的正确位置。 但是,这不一定能解决您的安全问题。 是否解决问题取决于问题是什么。
Windows使用ACL来授予/限制文件系统目录的权限。 ACL特定于用户,组或一组用户/组。 没有具体的应用程序。 假设一个特定的用户Art运行一个应用程序Papp
, Papp
将其数据存储在C:\Users\Art\AppData\Roaming\Papp
。 如果Art运行Qapp
则Qapp
(除非以不同的用户身份运行)可以访问Papp's
文件。
请注意,默认情况下,环境变量TMP
和TEMP
在AppData
下,所以在安全方面, ApplicationData
特殊文件夹没有更好或更差。 (虽然比C:\temp
和c:\tmp
)。
如果用户Betty运行Qapp
那么默认情况下, Qapp
将不能访问Art的Papp
文件,如果他们在他的AppData
。 所以如果安全问题是阻止运行Qapp
其他用户访问Art的Papp
文件,那么AppData
下的任何目录都可以工作。
但是如果问题出在运行Qapp
Art(可能是恶意软件,可能是Art没有故意运行的东西),那么一些解决方案是:1)使用白名单程序,只允许授权程序运行; 2)使用黑名单程序(即传统的反病毒),试图阻止像Qapp
3)混合方法的恶意程序,其中可信程序作为Art
运行,不可信程序作为另一个没有特权的用户运行或在沙箱中运行。
您应该使用通常被称为AppData
的特殊文件夹。 这可以通过调用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
在C#中访问。
在MSDN上ApplicationData
的描述如下:
作为当前漫游用户的应用程序特定数据的公共存储库的目录。
我为金融服务客户端创建了许多应用程序(即高度受限和锁定的企业桌面环境),使用这个位置并且在那里创建临时文件没有任何问题。
MSDN:Environment.SpecialFolder