2016-12-28 172 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

太棒了!這會工作得更好。我明白你的意思。謝謝您的幫助! –