Java 如何在Windows中安全地存储临时文件,特别是使用阻止临时目录的安全入侵预防应用程序

Java 如何在Windows中安全地存储临时文件,特别是使用阻止临时目录的安全入侵预防应用程序,java,c#,windows,security,temp,Java,C#,Windows,Security,Temp,在过去,许多应用程序都在Temp/Tmp目录中存储临时文件;系统的或用户特定的。最近,尽管我们在企业中有许多用户,由于病毒扫描工具或主机入侵预防工具以及不允许使用这些位置的策略,临时目录的使用被阻止。我认为这里的担心是多个应用程序可以从该位置读写,因此恶意应用程序可能会对另一个应用程序或其临时存储的数据产生负面影响。这似乎是一种正确且更安全的运作方式,因此我不能要求人们开始允许增加风险 那么,我的问题是如何(物理上)安全地存储特定于用户、特定于应用程序的临时文件 是否每个应用程序都应该自己管理它

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

那么,我的问题是如何(物理上)安全地存储特定于用户、特定于应用程序的临时文件

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

具体来说,我的重点是使用.NET4.0+、C#和Windows7+,但这个问题也应该适用于Windows上使用的其他语言

类似的,但较旧的,且没有足够的特定线程


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

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

MSDN上的
ApplicationData
说明如下:

作为当前漫游用户的应用程序特定数据的公共存储库的目录

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


根据MS指南,
ApplicationData
目录确实是存储特定于应用程序的文件(包括临时文件)的正确位置。然而,这并不一定能解决您的安全问题。它能否解决这一问题取决于问题是什么

Windows使用ACL授予/限制对文件系统目录的权限。ACL特定于用户、组或一组用户/组。没有特定的应用程序。假设一个特定的用户Art运行一个应用程序,
Papp
,并且
Papp
将其数据存储在
C:\Users\Art\AppData\Roaming\Papp
中。如果Art运行
Qapp
,则
Qapp
(除非作为其他用户运行)可以访问
Papp的
文件

请注意,默认情况下,环境变量
TMP
TEMP
位于
AppData
下,因此在安全性方面,
ApplicationData
特殊文件夹没有好坏之分。(它比
C:\temp
C:\tmp
要好)

如果用户Betty运行
Qapp
,则默认情况下
Qapp
将无法访问Art的
Papp
文件,如果这些文件位于其
AppData
下。因此,如果安全问题是阻止运行
Qapp
的其他用户访问Art的
Papp
文件,则
AppData
下的任何目录都将工作

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