SV.DOS.TMPFILEDEL

このエラーは、一時ファイルを終了時に削除するスケジュールが設定されていても、明示的に削除されていない場合に発生します。このエラーは、主としてサーバーまたはサーブレットのコンテキストにおける問題を示しています。

脆弱性とリスク

一時ファイルは、できる限り早急に削除する必要があります。ファイルに機密情報が含まれている場合、ファイルの存在時間が長ければ長いほど、攻撃者がファイル内容のアクセスを取得する機会が増えます。また、ディレクトリで許容できるファイル数には限界があるため、一時ファイルの数がオーバーフローして、サービス拒否 (DoS) の問題が生じる可能性もあります。

Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。

軽減と防止

一時ファイルは、使用後すぐに削除する必要があります。

例 1

コピー
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("userName");
         File file = File.createTempFile("file", ".dat");
         file.deleteOnExit();
         fillWithUserData(name);
         char[] data = readData(file);
         resp.getWriter().print(data);
     }

SV.DOS.TMPFILEDEL が 19 行目に対して報告されています。ファイル 'file' が 'delete on exit' (終了時に削除) にスケジュール設定されています。 すなわち、このファイルは jvm のライフタイムの間存続することになります (サーバーまたはサーブレットの場合には非常に長期間になります)。サーバー側のアプリケーションは、ファイルを明示的に削除する必要があります。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。