Каковы последствия безопасности использования необработанных типов в Java?
-
29-09-2019 - |
Вопрос
В настоящее время я рассматриваю последствия для безопасности различных предупреждений в большом заявлении Java EE. Поскольку большей части кода несколько лет, он содержит много видов использования необработанных типов сбора:
List items = new List();
а не параметризованные типы сбора:
List<Item> items = new List<Item>();
Единственное значение безопасности, о котором я могу придумать, это то, что необработанные типы не могут быть проверены статически в компиляции и потенциально могут привести к ошибкам времени выполнения, такими как ClassCastException
что, в зависимости от того, где в коде это происходит, может привести к отказу в обслуживании.
Есть ли другие последствия использования необработанных типов, о которых я не думаю?
Решение
Я не могу придумать никаких других последствий безопасности.
Для неинтесторонних последствий, общие типы также делают явные литые буквы * в Bytecode для типов, которые возвращают универсальный. Конечно, это прозрачно для пользователя, и кажется, что возвращенный тип является универсальным типом.
Например:
List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically
*Это происходит из -за Тип стирания.
Другие советы
Отсутствие безопасности типа может привести к проблемам безопасности. Например, скажем, этот список использовался для построения запроса:
"select name from users where id="+items[x]
Если предметы содержали строковое значение union select load_file('/var/passwd')
Злоумышленник мог прочитать произвольный файл в вашей системе. Это полезная нагрузка, предполагая, что вы используете MySQL. Если элементы были списком целых чисел, то этот запрос не уязвим для инъекции SQL.