路径操作解决方案?

Path Manipulation Solution?

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

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

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 文件扩展名。

所以这会阻止任何包含单词 "windows" 的路径,无论大小写如何。所以 "MyWindowsStuff" 将被排除在外。您可能还希望使扩展检查不区分大小写。

您还需要处理完整路径,而不仅仅是相对路径。

这是否足够取决于您。您认为有人可能会使用短文件名进入受限目录吗?例如,如果你想阻止人们访问 "Program Files" 目录,你就必须获取该目录的短名称并与它进行比较。在我的系统上,"Program Files" 是 "PROGRA~1" 而 "Program Files (x86)" 是 "PROGRA~2"。

关于您关于 "MyWindowsStuff" 是一个罕见案例的评论。如果某人有一个名为 "windows.txt" 的文件,这是对他想放在他家里的 windows 的描述怎么办?或者 "Windows" 目录,它是 "Documents" 文件夹的子目录,他在其中为 windows 汇集了他要为客户安装的报价?你的 "rare case" 并不罕见,你可能会这样。

您唯一要阻止的 "Windows" 目录是 Windows 目录,甚至不一定叫 "Windows"。您可以通过调用 Environment.GetFolderPath:

获取该目录的名称
Environment.GetFolderPath( Environment.SpecialFolder.Windows )

任何其他名为 "Windows" 或包含单词 "windows" 的目录都不是 Windows 目录,不应被阻止,也不应阻止包含单词 [= =24=] 在文件名中。