Каковы последствия безопасности использования необработанных типов в Java?

StackOverflow https://stackoverflow.com/questions/3503324

Вопрос

В настоящее время я рассматриваю последствия для безопасности различных предупреждений в большом заявлении 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top