2016-12-28 12 views
0

一般的に「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; 
     } 

は現在、これらの2つのチェックは、「パス操作」のいずれかの種類を防ぐのに役立つでしょうか?この方法ではの穴にと表示されますか?これが適用されるアプリケーションは、Windowsディレクトリへのアクセスを必要とせず、.pdfまたは.txt以上のファイル拡張子を使用することもありません。

答えて

1

したがって、大文字と小文字を区別せずに、単語「windows」を含むパスを禁止します。したがって、 "MyWindowsStuff"は除外されます。おそらく、エクステンションを大文字と小文字を区別しないようにチェックしたいと思うでしょう。

また、相対パスではなくフルパスで作業することもできます。

これで十分かどうかはあなた次第です。誰かが短いファイル名を使用して制限されたディレクトリにアクセスする可能性があると思われますか?たとえば、人々が "Program Files"ディレクトリにアクセスしないようにするには、そのディレクトリの短い名前を取得して比較する必要があります。私のシステムでは、 "Program Files"は "PROGRA〜1"で、 "Program Files(x86)"は "PROGRA〜2"です。

「MyWindowsStuff」に関するご意見はまれです。もし誰かが "windows.txt"という名前のファイルを持っていたら、彼は彼の家に入れたいと思っている窓の説明ですか?または、 "Documents"フォルダのサブディレクトリである "Windows"ディレクトリ。ここでクライアント用にインストールするウィンドウの見積もりをまとめることができますか?あなたの "まれなケース"はそれほどまれではありません。

ブロックしたい唯一の "Windows"ディレクトリは、必ずしも "Windows"と呼ばれるわけではないWindowsディレクトリです。

Environment.GetFolderPath(Environment.SpecialFolder.Windows) 

の「Windows」と呼ばれる他のディレクトリまたは単語「窓」を含むが、Windowsディレクトリではなく、ブロックされるべきではない、またパス名はすべき:あなたはEnvironment.GetFolderPathを呼び出すことによって、そのディレクトリの名前を取得しますファイル名に "windows"という単語が含まれています。

+0

エクステンションを大文字と小文字を区別しないようにしておくとよいでしょう。私は "MyWindowsStuff"についてあなたの意見を見ていますが、それはまれなケースであり、そうしたまれなケースに合わせなければならないとは思わないでしょう。うーん..短い名前については決して考えなかったし、それを比較することもできる。 –

+1

@ programmer117: "windows"チェックに関する私の更新を参照してください。 –

+0

素晴らしい!これはもっとうまくいくでしょう。あなたの言ってる事がわかります。助けてくれてありがとう! –

関連する問題