EN JP CN

CMP.CLASS

CMP.CLASS

このエラーは、プログラムが 2 つのオブジェクトのクラス名を比較し、これらが同一かどうかを調べようとしている場合に表示されます。また、オブジェクトが現在ロードされているクラスとは異なる方法を使用する特定のクラスを持つ場合やクラスローダーそのものから特定クラスを持つ場合にも表示されます。

脆弱性とリスク

名前でクラスを比較する場合、多種多様な攻撃を許すことになります。攻撃者は、ユーザーのコードを悪意のあるクラスに結合するコードや、もともとは結合を意図していないクラス同士を結合するコードを新たに作成します。

軽減と防止

クラス名の検索にオブジェクトの equals メソッドを使用しないでください。その代わりに、getClass メソッドで最初のオブジェクトのクラスを検索し、現在のクラスローダーの方法で 2 番目のオブジェクトのクラスを検索してください。

例 1

10    public void privateMethod(Object object1, Object object2) {
11      if (object1.getClass().getName().equals("anotherClass")) {// wrong
12        // do work based on the assumption we're dealing with
13        // the right object
14      }
15      if (object1.getClass() == object2.getClass()) { // correct
16        // do work based on the fact that the objects are the
17        // of the same class
18      }
19    }

CMP.CLASS が 11 行目に対して報告されています。クラス名による比較が行われています。

セキュリティガイドライン