2017-03-02 7 views
0

指定されたディレクトリとファイル名の接頭辞によって最新の修正ファイルを取得するには、以下のコードを使用します。 HPEの要塞分析を実行したとき、「パス操作」の結果が得られました。 あなたは私にこの発見を解決する方法を教えてもらえますか? Webアプリケーションのファイルシステムにアクセスするための最も安全なアプローチは何ですか?セキュリティの発見を強化する - CWE 22パス操作

public static File getLatestFilefromDirWithFileName(String archivesDirectoryPath, String fileStartWith){  
    File archivesDirectory = new File(archivesDirectoryPath); 

    FilenameFilter textFilter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
      if (name.startsWith(fileStartWith)) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }; 

    File[] filesInArchiveDir = archivesDirectory.listFiles(textFilter); 
    if (filesInArchiveDir == null || filesInArchiveDir.length == 0) { 
     return null; 
    } 

    File lastModifiedFile = filesInArchiveDir[0]; 
    for (int i = 1; i < filesInArchiveDir.length; i++) { 
     if (lastModifiedFile.lastModified() < filesInArchiveDir[i].lastModified()) { 
      lastModifiedFile = filesInArchiveDir[i]; 
     } 
    } 

    return lastModifiedFile; 
} 

答えて

0

archivesDirectoryPathは、適切なフォルダにアクセスできないようにする必要があります。

これを行う1つの方法は、指定されたフォルダがホワイトリストの場所に配置されることを検証することです。このホワイトリストは、コードで定義することも、「管理者」のユーザーが設定することもできます。このリストにないフォルダを処理しようとするとExceptionが発生します。

フォルダ名に/../が使用されていないことを確認できますが、作成されたフォルダがホワイトリストの一部であることを確認するだけで十分です。

+0

ホワイトリストを提供するために列挙型を作成しようとしましたが、強化版は同じ問題のコードをまだ文句を言います。 – mlo0424

+0

Fortifyは静的解析ツールであるため、検証コードを確認することはできません。これで、アプリケーションをホワイトリストで保護したことがあるので、このFortifyの問題を偽陽性としてマークすることができます。 –

関連する問題