7

Fortify で Log Forging の問題を解決できません。「検証されていないユーザー入力をログに書き込む」という問題は、getLongFromTimestamp() メソッドの両方のロギング呼び出しから発生しています。

public long getLongFromTimestamp(final String value) {
    LOGGER.info("getLongFromTimestamp(" + cleanLogString(value) + ")");

    long longVal = 0;
    Date tempDate = null;
    try {            
        tempDate = new SimpleDateFormat(FORMAT_YYYYMMDDHHMMSS, Locale.US).parse(value);
    } catch (ParseException e) {
        LOGGER.warn("Failed to convert to Date: " + cleanLogString(value) + " Exception: " + cleanLogString(e.getMessage()));
        throw new Exception(e);
    }

    if (tempDate != null) {
        longVal = tempDate.getTime();
    }
    return longVal;
}

private cleanLogString(String logString) {
    String clean = logString.replaceAll("[^A-Za-z0-9]", "");

    if(!logString.equals(clean)) {
        clean += " (CLEANED)";
    }

    return clean;
}

cleanLogString() メソッドは、私のプロジェクトの他の Log Forging Fortify の問題を修正しましたが、上記の 2 つには影響しません。

どんな助けでも大歓迎です!

4

4 に答える 4

4

Fortify Java アノテーションを使用して、サニタイズ関数から返されたデータが安全であることを Fortify に伝えることができます。

ログ偽造の問題を見ると、Web API を介して文字列が入ってきたため、文字列にフラグがXSSありWEBました。これらのフラグのみを削除する注釈を見つけようとしましたが、フラグを削除する方法が見つかりませんでしたWEB。私が見つけた唯一のドキュメントはSamples/advanced/javaAnnotationディレクトリです。

私のサニテーション メソッドは文字列をサニタイズするため、すべてのフラグを削除することにしました。ただし、プライバシー侵害を隠す可能性があるため、これは問題になる可能性があります.

@FortifyValidate("return")
private String sanitizeString(String taintedString) {
    return doSomethingWithTheString(taintedString);
}
于 2015-06-24T10:20:24.617 に答える
2

この質問が最初に書かれたとき、私たちのチームは log4j v1.2.8 を使用していましたが、log4j v2.6.2 にアップグレードした後、すべてのログ偽造の問題が解消されたことに気付きました。

log4j のバージョンがアップグレードされると、Fortify のログ偽造の問題はなくなります。上記の質問の cleanLogString() メソッドも不要です。例えば:

LOGGER.info("getLongFromTimestamp(" + value + ")");
于 2016-09-14T14:16:14.327 に答える