路径操作解决方案?
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=] 在文件名中。
好的,所以通常情况下,如果您的分析软件出现任何类型的“路径操作”问题,它们似乎真的只是一种解决方案,不允许用户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=] 在文件名中。