路径操纵解决方案?

时间:2016-12-28 15:39:40

标签: c# filepath fortify

好的,通常情况下,如果您的分析软件出现任何类型的“ Path Manipulation ”问题,它们似乎只是一种解决方案,不允许用户选择自己想要的路径。

我已经生成了这个简单的方法,可以在防止这些攻击方面做一些验证。

private const string directory = "Windows";
private static readonly string[] extensions = {".pdf", ".txt"};

string userInput = @"..\windows\..\krnl386.exe";

        private static bool Validate(string filePath)
        {
            if (string.IsNullOrEmpty(filePath))
            {
                return false;
            }

            if (filePath.ToUpper().Contains(directory.ToUpper()))
            {
                return false;
            }

            string ext = Path.GetExtension(filePath);

            for (int x = 0; x < extensions.Length; x++)
            {
                if (ext.Equals(extensions[x]))
                {
                    return true;
                }
            }

            return false;
        }

现在这两项检查有助于防止任何类型的“路径操作”吗?你看到这种方法中的漏洞是什么?这适用的应用程序永远不需要访问Windows目录,也不会使用超过.pdf.txt文件扩展名。

1 个答案:

答案 0 :(得分:1)

这样可以防止包含单词&#34; windows&#34;的任何路径,无论大小写如何。那么&#34; MyWindowsStuff&#34;将被排除在外。您可能也希望扩展检查不区分大小写。

您还希望在完整路径上工作,而不仅仅是相对路径。

这对你来说是否足够。您是否认为有可能或有可能使用短文件名来访问受限目录?例如,如果您想阻止人们访问&#34; Program Files&#34;目录,你必须得到该目录的简称,并与之进行比较。在我的系统上,&#34; Program Files&#34;是&#34; PROGRA~1&#34;和&#34;程序文件(x86)&#34;是&#34; PROGRA~2&#34;。

关于&#34; MyWindowsStuff&#34;的评论是一种罕见的情况。如果有人有一个名为&#34; windows.txt&#34;的文件,这是他想要放在他家里的窗户的描述怎么办?或者&#34; Windows&#34;该目录是&#34; Documents&#34;的一个子目录。文件夹,他在哪里为他打算为客户安装的窗口的报价?你的罕见病例&#34;你可能不是很少见。

唯一的&#34; Windows&#34;你想要阻止的目录是Windows目录,它甚至不一定被称为&#34; Windows&#34;。您可以通过调用Environment.GetFolderPath获取该目录的名称:

Environment.GetFolderPath( Environment.SpecialFolder.Windows )

任何其他名为&#34; Windows&#34;或包含“&#34; windows&#34;不是Windows目录,也不应该被阻止,路径名也不应该包含单词&#34; windows&#34;在文件名中。