创建文件有哪些安全问题

时间:2013-02-25 09:09:42

标签: c# asp.net

我正在为我的应用程序编写日志,说道: -

  

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

是的,可能存在问题。您的程序很可能在交互式用户帐户下运行,因此需要遵守任何UAC条件。

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

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

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

答案 2 :(得分:0)

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

通过检查授予运行apppool的帐户的权限来验证访问权限

或通过代码see this

答案 3 :(得分:0)

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

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

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

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

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

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