2016-12-28 93 views
0

好的,所以通常如果任何种类的'路径操作'问题出现在您的分析软件中,它们似乎只是一个解决方案,不允许用户选择他们自己想要的路径。路径操作解决方案?

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

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

这样可以防止包含单词“windows”的任何路径,而不管情况如何。所以“MyWindowsStuff”将被排除。你可能也想让扩展检查不区分大小写。

您还需要完整路径而不是相对路径。

这是否足够是有点取决于你。你认为有可能或有可能有人使用短文件名到达受限目录吗?例如,如果您想阻止用户访问“Program Files”目录,则必须获取该目录的短名称并与之进行比较。在我的系统上,“Program Files”是“PROGRA〜1”,“Program Files(x86)”是“PROGRA〜2”。

关于您对“MyWindowsStuff”的评论是一种罕见的情况。如果有人有一个名为“windows.txt”的文件,这是他想要放在他家里的窗户的描述?或者是一个“Windows”目录,它是“Documents”文件夹的一个子目录,他将在那里为他将要为客户端安装的窗口汇总一个报价?你的“罕见情况”并不那么罕见,你可能是这样的。

您想阻止的唯一“Windows”目录是Windows目录,它不一定称为“Windows”。您可以通过调用Environment.GetFolderPath获得该目录的名称:

Environment.GetFolderPath(Environment.SpecialFolder.Windows) 

所谓的“窗口”或含有“Windows”一词的任何其他目录不是Windows目录,并且不应该被阻止,也不应在路径名在文件名中包含单词“windows”。

+0

使扩展区不区分大小写的好点。我在“MyWindowsStuff”上看到你的观点,但我认为这将是一种罕见的情况,并且不会认为我必须为这种罕见情况进行调整。嗯..从来没有想过短名,可以考虑一下比较。 –

+1

@ programmer117:查看我关于“windows”检查的更新。 –

+0

太棒了!这会工作得更好。我明白你的意思。谢谢您的帮助! –