我正在为我的应用程序编写日志,说道: -
“C:\ Folder1 \ Folder2 \ Myfile.txt”(可配置)
如果此文件不存在我在我的代码中创建文件夹结构和文件(如果没有C驱动器,则会弹出一条消息,说明日志目录不存在)。
在代码审查中,一位同事说我不应该使用代码创建文件夹和文件,而应该要求客户端创建文件,并且只对该文件执行写操作。
他说这有安全问题但不确定是什么,所以我想把它发布在这里。
请帮我决定是否应该创建文件(如果不存在)或要求客户在每次安装时创建。
第一种方法有什么安全隐患?
答案 0 :(得分:0)
写入问题是尝试在C
根文件夹中创建的用户可能没有权限在那里创建它。永远不要假设用户始终是管理员。
这也是Windows'UAC的问题,这将是一个问题。
答案 1 :(得分:0)
是的,可能存在问题。您的程序很可能在交互式用户帐户下运行,因此需要遵守任何UAC条件。
如果这只是一个日志文件,则一种方法是使用临时文件,因此请使用:
http://msdn.microsoft.com/en-us/library/system.io.path.gettempfilename.aspx
这应该在登录用户本地的一个区域中创建,该区域应该允许写入文件。
答案 2 :(得分:0)
答案 3 :(得分:0)
没有代码本质上不安全。这完全取决于代码的其余部分,但作为一般经验法则,您应该限制应用程序可以访问哪些文件以及如何访问它们。尽可能地限制它,而不会损坏您的应用程序功能。
可能由此产生的安全漏洞允许用户读取他不应阅读的文件,或写入重要文件并以此方式损坏。例如,如果使用用户输入创建文件路径,则用户可以修改路径以便访问不允许访问的文件。 如果你创建一个这样的路径:
string filePath = "c:\\mysafefolder\\" + fileName;
并且用户输入相对路径,例如..\Windows\Passwords.txt
他将有效访问c:\windows\passwords.txt
。
如果您将应用程序配置为阻止访问除mysafefolder
以外的文件系统的任何部分,则此尝试读取机密文件将失败。
这只是可能发生的事情的一个示例,以及为什么限制应用程序权限是个好主意。此时您的代码可能非常安全,但限制权限正在考虑未来。