通过Class.forName()方法调用进行动态注入是否总是有害的?

时间:2019-07-02 05:34:10

标签: java reflection sonarqube

当前在我们的应用程序中,声纳法正在针对以下2个代码段给出错误。

1。

public void method1(String a) {
     Class clazz = Class.forName(a);
     B b = (B) clazz.newInstance();
 }

根据我的理解,在这种情况下,声纳在抱怨,因为黑客可以在运行时传递类名 使用该方法,他/她可以使用反射执行恶意代码。 现在,我的问题是,如果黑客传递的类不在类路径中,那么上述代码将如何执行。 它不应该抛出ClassNotFoundException \ NoClassDefFoundError吗? 另外,如果该类未由B类实现或扩展,它将抛出ClassCastException吗? 那么,能否请您告诉我这段代码不安全吗?

2。

public void method2(String fieldName) {
 Class<?> clazz = Class.forName("com.test.TestClass");
 Field field = clazz.getDeclaredField(fieldName);
 //
 }

在这种情况下,声纳抱怨getDeclaredField()。你能让我知道打电话给我带来什么伤害吗 特别是当我没有通过调用setAccessible()方法来设置可访问性时使用该方法。

如果上述两个代码段都有害,则可以提供解决方案。

谢谢

0 个答案:

没有答案