2012-03-16 9 views
2

Fortifyは、新しいファイル(パス)比較が行われた行でパス操作エラーを出しています。私はStruts 2を使用しています。固定パス操作エラー

この問題を解決する方法を教えてもらえますので、このエラーは発生しません。

private boolean filePresent(String fileName) { 
    if (fileName != null) { 
     String path = getDirPath(); 
     if (path != null) { 
      path = path.endsWith("/") ? path : path + "/"; 
      path = path + fileName; 
      if (new File(path).exists()) { 
       setFileName(fileName); 
       return true; 
      } 
     } 
    } 
    return false; 
} 

私は、ファイルが、私は、引数としてファイル名を渡すのweb.xmlから、全体のディレクトリパスを取得し、ファイル名にそれを追加していますので、弊社のWebサーバー&中に存在するかどうかを確認する必要が& &のパスを作成してFileオブジェクトと照合して、ファイルオブジェクトが存在するかどうかを確認します。

答えて

4

C:/ Windows/System32が存在するかどうか、/ etc/hostsが存在するかどうかをリモートWebユーザーが確認しないようにします。これにより、サーバーでフォレンジックリサーチを実行できるようになります。

おそらく、入力文字列に適切な数の ".."シーケンスを含めることで、あなたの関数がそれを可能にするとは思わなかったでしょう。

  1. ホワイトリストのアプローチ:

    は、問題を停止するには2つの方法があります。入力パラメータのすべての文字をスクラブし、 "a"から "z"まで、そしておそらく "。"入力がこれらの範囲外にある場合は例外をスローします。

a1。または、有効なファイルのリストが20未満であることがわかっている場合は、それらをリストして、入力が完全に一致しない場合は例外をスローします。

  1. ブラックリストアプローチ。シーケンスに ".."またはスラッシュまたは円記号が含まれている場合は、入力をチェックして例外をスローします。これは一般的に深みのある防御ではありませんが、私が今読んでいるように機能するためには、これは問題ありません。
0

あなたもフィルターで

のようにそれを行うには、フィルタを使用することができます

chain.doFilter(new RequestWrapper((HttpServletRequest) request), response); 

RequestWarperに

if(value.contains("..\\")) 
value = value.replace("..\\", ""); 
     if(value.contains("../")) 
      value = value.replace("../", ""); 
     if(value.contains("./")) 
      value = value.replace("./", ""); 
のようなものを使用