如何安全地将临时文件存储在 Windows 中,尤其是在安全入侵防护应用程序阻止 TEMP 目录的情况下

How to Securely store Temporary files in Windows, especially with Security Intrusion Prevention applications blocking the TEMP directory

过去许多应用程序将临时文件存储在Temp/Tmp 目录中;系统的或用户特定的。最近我们有许多企业用户由于病毒扫描工具或主机入侵防御工具和政策不允许使用这些位置而阻止使用临时目录。我认为这里的恐惧是多个应用程序可以从该位置读取和写入,因此流氓应用程序可能会对另一个应用程序或其临时存储的数据产生负面影响。这似乎是一种正确且更安全的运作方式,所以我不能要求人们开始允许增加风险。

我的问题是How/Where(物理上)安全地存储用户特定的、应用特定的临时文件。

是否应该期望每个应用程序自己管理它,或者是否有一些我不知道的新的应用程序和用户沙盒临时数据存储功能?

具体来说,我专注于使用 .NET 4.0+、C# 和 Windows 7+,但这个问题应该也适用于 Windows 上使用的其他语言。

相似,但较旧且不够具体的线程

加密内容和文件名的答案 1 似乎不是最佳实践解决方案,并且仍会被主机入侵防御系统阻止。

您应该使用通常称为 AppData 的特殊文件夹。这可以通过调用 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).

在 C# 中访问

ApplicationData在MSDN上的描述如下:

The directory that serves as a common repository for application-specific data for the current roaming user.

我已经为使用此位置的金融服务客户(即高度受限和锁定的公司桌面环境)创建了许多应用程序,并且在那里创建临时文件没有任何问题。

MSDN: Environment.SpecialFolder

根据 MS 指南,ApplicationData 目录确实是存储应用特定文件(包括临时文件)的正确位置。但是,这不一定能解决您的安全问题。能不能解决要看是什么问题了

Windows 使用 ACL 获得对文件系统目录的 grant/restrict 权限。 ACL 特定于一个用户、一个组或一组 users/groups。没有特定于应用程序。假设特定用户 Art 运行 有一个应用 Papp,并且 Papp 将其数据存储在 C:\Users\Art\AppData\Roaming\Papp 中。如果 Art 运行s Qapp 那么 Qapp(除非 运行 作为不同的用户)可以访问 Papp's 个文件。

请注意,默认情况下环境变量 TMPTEMPAppData 下,因此在安全方面 ApplicationData 特殊文件夹没有好坏之分。 (虽然比 C:\tempc:\tmp 好)。

如果用户 Betty 运行s Qapp 那么默认情况下 Qapp 将无法访问 Art 的 Papp 文件(如果这些文件在他的 AppData 下) .因此,如果安全问题是为了防止 other 用户 运行ning Qapp 访问 Art 的 Papp 文件,那么 AppData 下的任何目录都会工作。

但如果问题出在 Art 运行ning Qapp(这可能是恶意软件,也可能是 Art 无意 运行),那么一些解决方案是: 1) 使用白名单程序,只允许授权程序 运行,2) 使用黑名单程序(即传统杀毒软件),试图阻止像 Qapp 这样的恶意程序 3) 混合方法,其中受信任的程序 运行 作为 Art,不受信任的程序 运行 作为另一个权限较低的用户或沙箱中的 运行。