Как исправить CWE-470: использование внешнего входа для выбора классов или кода («небезопасное отражение») - PullRequest
0 голосов
/ 28 июня 2018

Я получил 470 на строку в моем коде и по праву так, как определено Верой.

Вера говорит, чтобы исправить:

Применение строгой проверки ввода с использованием белых или косвенных выбор, чтобы убедиться, что пользователь выбирает только допустимые классы или код.

Итак, я создал строгий белый список того, к какому отражению имени класса может быть предоставлен доступ как Set<String>

Затем я завернул Class.forName в

if (whitelist.contains(className) {
   Veracode still fires in here with a 470
}

Кто-нибудь знает, как должно выглядеть исправление, чтобы Вера не срабатывала? Я чувствую, что следовал их рекомендованному исправлению.

1 Ответ

0 голосов
/ 10 июля 2018

Ответ заключается в том, что все имена классов должны происходить из надежного источника. Единственный надежный источник - это жестко запрограммированная строка в файле класса. Ничего не читается из файлов свойств, нет коллекции, которую вы создаете и передаете в механизм проверки.

Он должен видеть жестко запрограммированную константу "com.dang.this.is.strict.ClassName:" при загрузке. Белый список жестко закодированных строк.

Вы можете иметь отличный код проверки, чтобы убедиться, что ничего плохого не происходит, но он не пройдет, так как не жестко закодированная строка. В этой ситуации вы смягчаете и предоставляете объяснения и надеетесь, что этого будет достаточно для лиц, которые рассматривают результаты.

Они говорят,

Применение строгой проверки ввода с использованием белых или косвенных выбор, чтобы убедиться, что пользователь выбирает только допустимые классы или код.

Я просто не осознавал, что белые списки были строго строковыми константами в классах. Моя ошибка заключалась в том, что я мог создать белый список в коде во время выполнения. Что иногда мне нужно делать, так что я буду держать свой валидатор и требовать смягчения.

...