Всегда ли вредно динамическое внедрение через вызов метода Class.forName ()? - PullRequest
0 голосов
/ 02 июля 2019

В настоящее время в нашем приложении 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 ().

Если вообще упомянутые выше 2 фрагмента кода вредны, будет полезно, еслиВы можете предоставить решение.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...