C# 创建文件时有哪些安全问题

C# 创建文件时有哪些安全问题,c#,asp.net,C#,Asp.net,我正在为我的应用程序编写日志,路径为:- “C:\Folder1\Folder2\Myfile.txt”(可配置) 如果这个文件不存在,我将在代码中创建文件夹结构和文件(如果没有C驱动器,我会弹出一条消息说日志目录不存在) 在CodeReview中,一位同事说我不应该使用代码创建文件夹和文件,而应该让客户机创建文件,只对该文件执行写操作 他说这有安全问题,但不确定是什么问题,所以我想把它贴在这里 请帮助我决定是否创建不存在的文件,或者要求客户端在每次安装时创建 第一种方法的安全含义是什么?写入问

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

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

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

在CodeReview中,一位同事说我不应该使用代码创建文件夹和文件,而应该让客户机创建文件,只对该文件执行写操作

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

请帮助我决定是否创建不存在的文件,或者要求客户端在每次安装时创建


第一种方法的安全含义是什么?

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


这也是windows的UAC的问题,这将是一个问题

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

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


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

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

通过检查应用程序池运行时所使用的帐户的权限来验证访问权限


或者通过代码

没有任何代码是天生不安全的。这一切都取决于代码的其余部分是什么样子的,但一般来说,您应该限制应用程序可以访问哪些文件以及如何访问它们。在不损害应用程序功能的情况下,尽可能地限制这一点

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

string filePath = "c:\\mysafefolder\\" + fileName;
用户输入一个相对路径,例如
。\Windows\Passwords.txt
,他将有效地访问
c:\Windows\Passwords.txt

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


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

感谢您的回复,这是一个web应用程序,对管理员用户不敏感,因此创建文件夹没有问题。有什么安全隐患吗?我的意思是,就像外部用户访问此文件并造成伤害一样。@PranaliDesai asp.net web应用程序将在
匿名
用户模式下运行。可能性是,
inetpub
可能无法访问
write
来创建文件夹/文件。您将此标记为asp.net问题。您的应用程序是将数据保存到磁盘的web应用程序还是桌面应用程序?@Nikola,这是一个web应用程序最简单的方法是请您的同事澄清。我看不出这里有任何安全问题,但也许他有。让他解释一下。@Nvoigt,是的,这是最简单的,我同意,但困难的是他不记得了,说他以前的项目中发生过什么。他是新来的,我不想把他的脑袋吃掉。如果我没有发现任何安全问题,他会学到其他东西,我会:),无论如何,感谢您的回复。这是日志文件,可配置值存储在web.config中,我不知道我的web应用程序的用户如何写入文件。如果是客户故意做的所有事情都属于他,他可以破坏他的资源(我不介意:)但你的web应用程序会写入日志文件,因此运行web应用程序的安全帐户应该有足够的权限修改文件。它模拟管理员,所以不用担心