CMP.CLASS
当程序尝试比较两个对象的类名以查看它们是否相同时,将会出现此错误。如果一个对象的特定类使用除当前加载的类以外的方法或通过类加载程序本身,也会出现此错误。
漏洞与风险
按名称比较类时,允许混合搭配攻击,其中攻击者会构造新代码,该代码将您的部分代码与恶意类链接,或将两个不应该进行链接的类链接在一起。
缓解与预防
不使用对象的 equals 方法查找类名。使用 getClass 方法检索第一个对象的类,然后通过当前的类加载程序检索第二个对象的类。
示例 1
复制
public void privateMethod(Object object1, Object object2) {
if (object1.getClass().getName().equals("anotherClass")) {// wrong
// do work based on the assumption we're dealing with
// the right object
}
if (object1.getClass() == object2.getClass()) { // correct
// do work based on the fact that the objects are the
// of the same class
}
}
针对第 11 行报告 CMP.CLASS:按类名进行比较。