0

我在一条路径上为我的应用程序写日志:-

“C:\Folder1\Folder2\Myfile.txt”(可配置)

如果此文件不存在,我将在我的代码中创建文件夹结构和文件(如果没有 C 驱动器,我会弹出一条消息说日志目录不存在)。

在代码审查中,一位同事说我不应该使用代码创建文件夹和文件,而应该要求客户端创建文件并且只对该文件执行写操作。

他说这有安全问题,但不确定是什么,所以我想把它贴在这里。

请帮助我决定是否应该创建文件(如果不存在)或要求客户端在每次安装时创建。

第一种方法的安全隐患是什么?

4

4 回答 4

0

是的,可能有问题。您的程序很可能在交互式用户帐户下运行,因此受制于对其施加的任何 UAC 条件。

如果这只是一个日志文件,一种方法是使用临时文件,因此使用:

http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx

这应该在允许写入文件的登录用户的本地区域中创建。

于 2013-02-25T09:23:19.630 回答
0

我看到的安全问题是您的 Web 应用程序能够访问和写入目录中的文件(可配置,如您所述)。

通过检查授予您的应用程序池运行的帐户的权限来验证访问权限

或通过代码看到这个

于 2013-02-25T09:37:47.707 回答
0

没有代码本质上是不安全的。这一切都取决于其余代码的外观,但作为一般经验法则,您应该限制应用程序可以访问哪些文件以及如何访问它们。尽可能限制这一点,而不会损坏您的应用程序功能。

可能由此产生的安全漏洞允许用户读取他不应该读取的文件,或写入重要文件并以这种方式损坏它。例如,如果使用用户输入创建文件路径,则用户可以修改路径以便他访问不允许访问的文件。如果您创建这样的路径:

string filePath = "c:\\mysafefolder\\" + fileName;

并且用户输入一个相对路径,例如..\Windows\Passwords.txt他将有效地访问c:\windows\passwords.txt.

如果您将应用程序配置为阻止访问除 之外的文件系统的任何部分,mysafefolder则读取机密文件的尝试将失败。

这只是可能发生的情况的一个示例,以及为什么限制您的应用程序权限是一个好主意。此时您的代码可能非常安全,但限制权限是提前考虑的。

于 2013-02-25T12:23:52.277 回答
0

写入问题是尝试在C根文件夹中创建的用户可能没有在那里创建它的权限。永远不要假设用户总是管理员。

这也是 Windows 的 UAC 的问题,这将是一个问题。

于 2013-02-25T09:19:26.517 回答