CERT ID (Java)
Klocwork Java チェッカーに対する CERT Java ID の以下のマッピングは、コミュニティで開発されたマッピングです。
| ガイドライン | チェッカー名および説明 |
|---|---|
| CERT DCL02-J (L3): 拡張 for 文の実行中にループ本体の要素を更新しない |
JD.UNMOD 変更できないコレクションの変更 |
| CERT ENV03-J (L1): 危険な組み合わせのパーミッションを割り当てない |
SV.CLEXT.POLICY クラスが 'java.security.Policy' を拡張しています |
| CERT ENV06-J (L1): 本番コードにはデバッグエントリポイントを含めない |
JAVA.DEBUG.ENTRY TRANSLATE ME: Production code must not contain debugging entry points |
| CERT ERR01-J (L3): センシティブな情報を例外によって外部に漏えいしない |
SV.IL.DEV 設計情報の漏洩 |
| CERT ERR03-J (L3): メソッドが処理に失敗した場合はオブジェクトの状態を元に戻す |
SV.HTTP_SPLIT HTTP 応答分割 SV.SSRF.URI 無効化されたユーザー入力に基づく URI です。 |
| CERT ERR04-J (L3): finally ブロックの処理を途中で終了しない |
JD.FINRET finally 内の return |
| CERT ERR05-J (L3): チェック例外を finally ブロックの外に伝播させない |
JD.UNCAUGHT 例外がキャッチされていません |
| CERT ERR07-J (L2): RuntimeException, Exception, Throwable をスローしない |
EXC.BROADTHROWS 過度に広範な範囲に対応するメソッドが宣言をスローしています |
| CERT ERR08-J (L1): NullPointerException およびその親クラスの例外をキャッチしない |
JD.CATCH ランタイム例外のキャッチ |
| CERT ERR09-J (L3): 信頼できないコードにJVMを終了させない |
SV.UMC.EXIT System.exit() および Runtime.exit() メソッドの呼び出しをサーブレット コードで使用すべきではありません UMC.EXIT System.exit() メソッドの呼び出しは好ましくありません |
| CERT EXP00-J (L2): メソッドの返り値を無視しない |
RI.IGNOREDCALL immutable オブジェクトに対して呼び出されたメソッドから返された値が無視されています RR.IGNORED 戻り値が無視されています |
| CERT EXP01-J (L3): オブジェクトが必要な場合は null を使用しない |
NPE.COND null チェック後の null ポインタを参照しています NPE.CONST null 定数が代入されたオブジェクトを参照しています NPE.RET メソッドから返された null ポインタを参照しています NPE.RET.UTIL マップまたはコレクションから返されたnull 値を参照しています NPE.STAT 戻り値の null ポインタ 参照 (統計情報) REDUN.EQNULL equals() に式と null が指定された疑わしい呼び出しです(決して true にはなりません) |
| CERT EXP02-J (L2): 2つの配列を比較するのに Object.equals() メソッドを使用しない |
JD.EQ.ARR 配列に対する 'equals' の呼び出し |
| CERT EXP03-J (L2): ボクシングされたプリミティブ型の値の比較に等値演算子を使わない |
CMP.OBJ == によるオブジェクトの比較 |
| CERT FIO01-J (L3): 適切なパーミッションを設定してファイルを作成する |
SV.PERMS.HOME パーミッションを設定せずに、ユーザーのホームディレクトリに作成されるファイル SV.PERMS.WIDE 広すぎるパーミッション |
| CERT FIO03-J (L2): 一時ファイルはプログラムの終了前に削除する |
SV.DOS.TMPFILEDEL JVM のライフタイムの間一時ファイルが存続します SV.DOS.TMPFILEEXIT 一時ファイルが存続します |
| CERT FIO04-J (L3): 不要になったリソースは解放する |
RLK.AWT AWT オブジェクトが終了時に破棄されていません RLK.FIELD フィールドに保存されたシステム リソースがリークする可能性があります RLK.HIBERNATE Hibernate オブジェクトが終了時に閉じられていません RLK.IMAGEIO ImageIO ストリームが終了時に閉じられていません RLK.IN 入力ストリームが終了時に閉じられていません RLK.JNDI JNDI コンテキストが終了時に閉じられていません RLK.JPA {3} オブジェクトが終了時に閉じられていません。 RLK.MAIL JavaMail オブジェクトが終了時に閉じられていません RLK.MICRO Java Microedition 接続が終了時に閉じられていません RLK.NIO NIO オブジェクトが終了時に閉じられていません RLK.OUT 出力ストリームが終了時に閉じられていません RLK.SOCK ソケットが終了時に閉じられていません RLK.SQLCON Sql 接続が終了時に閉じられていません RLK.SQLOBJ Sql オブジェクトが終了時に閉じられていません RLK.SWT SWT オブジェクトが終了時に破棄されていません RLK.ZIP Zip ファイルが終了時に閉じられていません |
| CERT FIO13-J (L3): センシティブな情報を信頼境界の外に記録しない |
SV.IL.SESSION セッション ID のログ記録 |
| CERT FIO16-J (L3): パス名は検証する前に正規化する |
SV.EXEC.PATH 信頼できない検索パス SV.PATH パスまたはファイル名のインジェクション SV.PATH.INJ ファイル インジェクション SV.TMPFILE 一時ファイルのパス改ざん |
| CERT IDS00-J (L1): SQL インジェクションを防ぐ |
SV.DATA.DB データ インジェクション SV.SQL SQL インジェクション SV.SQL.DBSOURCE 未検証のデータベースからの情報がSQL文に使用されています |
| CERT IDS01-J (L1): 文字列は検査するまえに標準化する |
SV.TAINT 不正データ SV.TAINT_NATIVE 不正データがネイティブ コードに渡されています SV.XSS.DB クロスサイト スクリプティング (Stored XSS) SV.XSS.REF クロスサイト スクリプティング (Reflected XSS) |
| CERT IDS03-J (L2): ユーザ入力を無害化せずにログに保存しない |
SV.LOG_FORGING ログの偽造 |
| CERT IDS07-J (L1): Runtime.exec() メソッドに渡された信頼できないデータを無害化する |
SV.EXEC プロセス インジェクション SV.EXEC.DIR プロセス インジェクション。作業ディレクトリ SV.EXEC.ENV プロセス インジェクション。環境変数 SV.EXEC.LOCAL プロセス インジェクション。ローカル引数 SV.EXEC.PATH 信頼できない検索パス |
| CERT IDS16-J (L1): XML インジェクションを防ぐ |
JAVA.SV.XML.INVALID XML は Java オブジェクトにマーシャリング解除される前に検証されません |
| CERT IDS17-J (L2): XML の外部エンティティ攻撃を防ぐ |
SV.XXE.DBF XML 外部実体攻撃の可能性 SV.XXE.SF XML 外部実体攻撃の可能性 SV.XXE.SPF XML 外部実体攻撃の可能性 SV.XXE.TF XML 外部実体攻撃の可能性 SV.XXE.XIF XML 外部実体攻撃の可能性 SV.XXE.XRF XML 外部実体攻撃の可能性 |
| CERT JNI00-J (L3): ネイティブメソッドにはラッパーを定義する |
JAVA.NATIVE.PUBLIC TRANSLATE ME: Define wrappers around native methods |
| CERT JNI01-J (L1): 直近の呼出し元のクラスローダーのインスタンス(loadLibrary)を使ってタスクを実行する標準APIを安全に呼出す |
SV.LOADLIB.INJ 'loadLibrary' メソッドに対する信頼できない呼び出し |
| CERT LCK05-J (L3): 信頼できないコードによって変更されうる static フィールドへのアクセスは同期する |
SV.SHARED.VAR サーブレットから static 変数への非同期アクセス |
| CERT LCK07-J (L3): デッドロックを回避するためにロックは同一順序で要求および解放する |
JD.LOCK 取得したロックを解放していません |
| CERT LCK09-J (L3): 途中で待機状態になる可能性のある操作をロックを保持したまま実行しない |
JD.LOCK.NOTIFY ロックが保持された状態で 'notify' メソッドが呼び出されています JD.LOCK.SLEEP ロックが保持された状態で 'sleep' メソッドが呼び出されています JD.LOCK.WAIT ロックが保持された状態で 'wait' メソッドが呼び出されています |
| CERT LCK10-J (L3): 正しいダブルチェックロック手法を使う |
JD.SYNC.DCL ダブルチェック ロッキング |
| CERT MET01-J (L2): メソッド引数の検証には決してアサートを使用しない |
JAVA.ASSERT.ARG TRANSLATE ME: Never use assertions to validate method arguments |
| CERT MET09-J (L3): equals() メソッドを実装するクラスでは hashCode() メソッドも実装する |
EHC.EQ クラスが hashCode() を定義していますが、equals() は定義していません EHC.HASH クラスが equals() を定義していますが、hashCode() は定義していません |
| CERT MET12-J (L2): ファイナライザは使わない |
FIN.EMPTY 空の finalize() メソッドは削除する必要があります FIN.NOSUPER finalize() メソッドの実装は super.finalize() を呼び出す必要があります JD.UMC.FINALIZE 'Object.finalize' メソッドが明示的に呼び出されています JD.UMC.RUNFIN runFinalizersOnExit() が呼び出されています SV.EXPOSE.FIN finalize() メソッドは、public ではなく protected アクセス修飾子を使用する必要があります |
| CERT MSC00-J (L2): セキュアなデータ交換には Socket クラスではなく SSLSocket クラスを使用する |
SV.WEAK.TLS 脆弱な SSL/TLS プロトコルは使用しないでください。 |
| CERT MSC01-J (L3): 空の無限ループを使用しない |
JAVA.INF.LOOP.EMPTY TRANSLATE ME: Do not use an empty infinite loop |
| CERT MSC02-J (L1): 高品質の乱数を生成する |
SV.RANDOM 安全ではない乱数ジェネレータの使用 |
| CERT MSC03-J (L1): センシティブな情報をハードコードしない |
SV.PASSWD.HC ハードコードされたパスワード SV.PASSWD.HC.EMPTY 空のパスワード SV.PASSWD.PLAIN プレーンテキストのパスワード SV.PASSWD.PLAIN.HC プレーンテキストのパスワード SV.SENSITIVE.DATA 暗号化されていない機密データが書き込まれます SV.SENSITIVE.OBJ 暗号化されていない機密データを持つオブジェクトが保存されます |
| CERT MSC05-J (L3): ヒープメモリを使い果たさない |
JD.INF.ALLOC 無限ループ内での割り当てです。 SV.DOS.ARRSIZE 不正なサイズが配列割り当てに使用されています SV.INT_OVF 不正データが整数オーバーフローを引き起こす可能性があります |
| CERT MSC06-J (L3): 繰り返し処理中に基となるコレクションを変更しない |
JD.CONCUR ConcurrentModificationException の可能性があります |
| CERT MSC11-J (L2): servlet 内のセッション情報をリークさせない |
SV.IL.SESSION セッション ID のログ記録 SV.IL.SESSION.CLIENT HttpServletRequest.getRequestedSessionId メソッドは使用しないでください。 SV.SESSION.FIXATION.COOKIE cookie は、セッションの固定化に対して脆弱であってはなりません SV.SPRING.FIXATION セッション固定化保護が無効になっています。 |
| CERT NUM00-J (L3): 整数オーバーフローを検出あるいは防止する |
SV.INT_OVF 不正データが整数オーバーフローを引き起こす可能性があります |
| CERT NUM07-J (L3): NaN と比較しようとしない |
JAVA.COMPARE.NAN TRANSLATE ME: Do not attempt comparisons with NaN |
| CERT NUM09-J (L2): 浮動小数点変数をループカウンターとして使用しない |
JAVA.LOOP.CTR.FLOAT TRANSLATE ME: Do not use floating-point variables as loop counters |
| CERT NUM10-J (L2): 浮動小数点リテラルから BigDecimal オブジェクトを構築しない |
JAVA.BIGDEC.FLOAT TRANSLATE ME: Do not construct BigDecimal objects from floating-point literals |
| CERT OBJ01-J (L1): フィールドへのアクセスを制限する |
SV.EXPOSE.FIELD static フィールドは悪意のあるコードによって変更される可能性があります SV.EXPOSE.IFIELD インスタンス フィールドは final にする必要があります SV.EXPOSE.MUTABLEFIELD static mutable フィールドは悪意のあるコードによってアクセスされる可能性があります SV.STRUTS.PRIVATE ステータス フォーム: non-private フィールド SV.STRUTS.STATIC ステータス フォーム: static フィールド |
| CERT OBJ04-J (L2): 信頼できないコードにインスタンスを安全に渡すため、可変クラスにはコピー機能を実装する |
SV.EXPOSE.RET 内部表現が露出される可能性があります SV.EXPOSE.STORE メソッドが mutable オブジェクトへの参照を保存しています |
| CERT OBJ05-J (L1): privateな可変クラスメンバへ参照を返さない |
SV.EXPOSE.RET 内部表現が露出される可能性があります SV.EXPOSE.STORE メソッドが mutable オブジェクトへの参照を保存しています |
| CERT OBJ09-J (L2): クラス名を比較するのではなくクラスを比較する |
CMP.CLASS クラス名による比較が行われています |
| CERT OBJ10-J (L2): public staticのfinal宣言していないフィールドを使わない |
SV.EXPOSE.FIELD static フィールドは悪意のあるコードによって変更される可能性があります SV.STRUTS.STATIC ステータス フォーム: static フィールド |
| CERT OBJ11-J (L1): コンストラクターが例外をスローすることに注意する |
JAVA.CTOR.EXCEPT TRANSLATE ME: Be wary of letting constructors throw exceptions JAVA.FINAL.STATIC.VAR TRANSLATE ME: Use of nonfinal static variable |
| CERT SEC00-J (L2): センシティブな情報を特権ブロックから信頼境界を越えて漏えいさせない |
SV.PRIVILEGE.MISSING 呼び出されるメソッドは doPrivileged ブロック内にあってはなりません |
| CERT SEC03-J (L1): 信頼できないコードに任意のクラスのロードを許可した後で信頼するクラスをロードしない |
SV.CLASSLOADER.INJ クラスローダー URL インジェクション SV.CLEXT.CLLOADER クラスが 'java.lang.ClassLoader' を拡張しています SV.CLLOADER クラスローダが直接使用されています |
| CERT SER01-J (L1): シリアライズに関連するメソッドは正しいシグネチャで実装する |
SV.SERIAL.SIG Serializable クラスのメソッド readObject() および writeObject() が正しいシグネチャを持つ必要があります |
| CERT SER03-J (L2): 暗号化されていないセンシティブなデータをシリアライズしない |
SV.SERIAL.NOFINAL シリアル化可能なクラスでは、メソッド readObject() および writeObject() は final である必要があります SV.SERIAL.NOWRITE メソッド writeObject() を Serializable クラスに対して定義する必要があります |
| CERT SER05-J (L1): 内部クラスのインスタンスをシリアル化しない |
JAVA.SERIALIZE.INNER TRANSLATE ME: Do not serialize instances of inner classes |
| CERT SER06-J (L3): 復元時には private 宣言された可変コンポーネントはディフェンシブコピーする |
SV.SERIAL.NOFINAL シリアル化可能なクラスでは、メソッド readObject() および writeObject() は final である必要があります SV.SERIAL.NOREAD メソッド readObject() を Serializable クラスに対して定義する必要があります |
| CERT SER09-J (L3): オーバーライド可能なメソッドを readObject() メソッドから呼び出さない |
SV.SERIAL.OVERRIDE readObject() メソッドからオーバーライド可能なメソッドを呼び出さないでください |
| CERT SER12-J (L2): 信頼できないデータの復元はしない |
SV.SERIAL.NOFINAL シリアル化可能なクラスでは、メソッド readObject() および writeObject() は final である必要があります SV.SERIAL.NOREAD メソッド readObject() を Serializable クラスに対して定義する必要があります |
| CERT THI00-J (L3): Thread.run() メソッドを直接呼び出さない |
JD.THREAD.RUN 'Thread.run' メソッドが明示的に呼び出されています |
| CERT THI01-J (L3): ThreadGroup メソッドを呼び出さない |
JAVA.THREADGROUP TRANSLATE ME: Do not invoke ThreadGroup methods |
| CERT THI03-J (L3): wait() メソッドと await() メソッドは必ずループ内で呼び出す |
JAVA.WAIT.IN.LOOP TRANSLATE ME: Always invoke wait() and await() methods inside a loop |
| CERT VNA00-J (L2): 共有プリミティブ型変数の可視性を確保する |
SV.SHARED.VAR サーブレットから static 変数への非同期アクセス |
| CERT VNA01-J (L3): 不変オブジェクトへの共有参照の可視性を確保する |
SV.SHARED.VAR サーブレットから static 変数への非同期アクセス |
| CERT VNA02-J (L2): 共有変数への複合操作のアトミック性を確保する |
SV.SHARED.VAR サーブレットから static 変数への非同期アクセス |