1

アプリケーションの Fortify レポートを生成しました。Fortify レポートでは、以下のコードでログ偽造の問題が示されています。

holDate = ((MaintainHolidayCalenderForm) form).getCALENDER_DATE();
logger.info("This is some description" + holDate + holName );

一部の人々の提案に従って、「/n」を「」に、「/r」を「」に置き換えましたが、それでも問題は解決しません。

誰でもこれを解決する方法を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

3

ログ消去文字 (/n /r) を削除するなどのブラックリストの修正により、攻撃者がアプリケーションで悪意のあることを行う機会が依然として残ります。holDate と holName がブラウザーから送信された場合、それらは UTF-8 文字列であり、非常に長くなる可能性があり、かなり大きな UTF-8 Unicode 文字セットの文字を含むことができます。ログが通常 HTML ビューアーで表示される場合 (一般的)、攻撃の例は次のようになります。バックスペースまたはデルを「友好的な攻撃者がログアウトしました - ここには何も表示されません」というメッセージに戻す原因となる Unicode 文字。(注: 攻撃者がどのように悪い影響を与えるかを予測しようとしないでください。

ブラックリストに登録するのではなく、ログに書き込むデータが期待どおりのタイプ (ホワイトリスト検証とも呼ばれます) であり、適切な長さであることを確認する必要があります。

したがって、修正 (投稿したコード内): 1. holDate が Date オブジェクト ( java.util.Date) でない場合は、Date オブジェクトであることを確認します。
2. HolName はおそらく、比較的短い長さの英数字の文字列です。短い長さ (30 文字など) を選択し、holName で英数字のみが受け入れられるようにしてください。
長さを確認した後に正規表現を使用して、String.matches("^[a-zA-Z0-9]*$")英数字のみを受け入れるようにすることができます。

このホワイトリストの入力検証は、フォーム pojos のセッターで行う必要があります。

于 2014-07-08T17:49:47.770 に答える