17

FortifyPathManipulationエラーを取得する以下の単純なJavaコード。これを解決するのを手伝ってください。久しぶりに苦労しています。

public class Test {
    public static void main(String[] args) {
        File file=new File(args[0]);
    }

}
4

8 に答える 8

18

使用する前に URL を正規化してみてください

https://docs.oracle.com/javase/7/docs/api/java/net/URI.html#normalize()

Path path = Paths.get("/foo/../bar/../baz").normalize();

またはorg.apache.commons.io.FilenameUtilsから正規化を使用します

https://commons.apache.org/proper/commons-io/javadocs/api-1.4/org/apache/commons/io/FilenameUtils.html#normalize(java.lang.String)

Stirng path = FilenameUtils.normalize("/foo/../bar/../baz");

両方の結果は次のようになります\baz

于 2016-12-06T14:12:33.223 に答える
13

Path ManipulationのOWASP ページを見ると、

攻撃者は、ファイルシステムの操作で使用されるパスを指定できます

ユーザー指定の入力によって定義されたファイルを開いています。あなたのコードは脆弱性のほぼ完璧な例です! また

  1. 上記のコードを使用しないでください (ユーザーに入力ファイルを引数として指定させないでください)。
  2. 提供されたファイルのリストからユーザーが選択できるようにします (整数の選択肢を持つファイルの配列)。
  3. ユーザーにファイル名をまったく提供させないでください。構成可能性を削除します
  4. 脆弱性を受け入れますが、ファイル名をチェックして保護します (ただし、これは最悪の行為です。いずれにせよ誰かが回避する可能性があります)。

または、アプリケーションの設計を再考してください。

于 2012-10-02T13:14:50.233 に答える
3

入力にはalnumとperiodのみを許可します。つまり、ファイルを脆弱にする制御文字「..」、「/」、「\」を除外します。たとえば、/ path/password.txtを入力できないようにする必要があります。

完了したら、再スキャンしてからFortifyAWBを実行します。

于 2012-10-15T18:54:18.507 に答える
-2

正規表現を使用してファイル パスとファイル名を検証する

fileName = args[0];
final String regularExpression = "([\\w\\:\\\\w ./-]+\\w+(\\.)?\\w+)";
Pattern pattern = Pattern.compile(regularExpression);
boolean isMatched = pattern.matcher(fileName).matches();
于 2015-08-21T07:15:14.300 に答える