好的,通常情况下,如果您的分析软件出现任何类型的“ 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
文件扩展名。
答案 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;在文件名中。