[英]Path Manipulation Solution?
好的,因此,通常情况下,如果您的分析软件出现任何“ 路径操纵 ”问题,它们似乎实际上只是一种解决方案,不允许用户选择自己想要的路径。
我已经生成了这种简单的方法,可以对这些攻击进行一些验证。
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”目录,则必须获取该目录的简称,并与之进行比较。 在我的系统上,“程序文件”为“ PROGRA〜1”,“程序文件(x86)”为“ PROGRA〜2”。
关于您对“ MyWindowsStuff”的评论很少见。 如果有人有一个名为“ windows.txt”的文件,该文件描述了他要放在自己家里的窗户,该怎么办? 还是“ Windows”目录,它是“文档”文件夹的子目录,他将要为客户端安装的Windows的报价汇总到一起? 您的“稀有案例”并不罕见。
您要阻止的唯一“ Windows”目录是Windows目录,甚至不必称为“ Windows”。 您可以通过调用Environment.GetFolderPath获得该目录的名称:
Environment.GetFolderPath( Environment.SpecialFolder.Windows )
任何其他名为“ Windows”或包含单词“ windows”的目录都不是Windows目录,也不应被阻止,路径名也不应在文件名中包含单词“ windows”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.