Каковы последствия безопасности использования необработанных типов в Java? - PullRequest
4 голосов
/ 17 августа 2010

В настоящее время я рассматриваю последствия для безопасности различных предупреждений в большом приложении Java EE.Поскольку большей части кода несколько лет, он содержит множество типов необработанных коллекций:

List items = new List();

, а не параметризованных типов коллекций:

List<Item> items = new List<Item>();

Единственное следствие безопасности, которое яМожно подумать, что необработанные типы не могут быть статически проверены на тип при компиляции и могут привести к ошибкам во время выполнения, таким как ClassCastException, которые в зависимости от того, где в коде это происходит, могут привести к отказу в обслуживании.

Есть ли еще какие-либо последствия использования необработанных типов, о которых я не думаю?

Ответы [ 2 ]

5 голосов
/ 17 августа 2010

Я не могу думать о каких-либо других последствиях для безопасности.

Для последствий, не связанных с безопасностью, универсальные типы также выполняют явное приведение * в байт-код для типов, которые возвращают универсальный тип.Конечно, это прозрачно для пользователя, и кажется, что возвращаемый тип является универсальным типом.

Например:

List<Item> items = new ArrayList<Item>();
// .get(int) and remove(int) return Item automatically

* Это происходит из-за стирания типа .

0 голосов
/ 17 августа 2010

Отсутствие безопасности типа может привести к проблемам с безопасностью. Например, допустим, этот список использовался для создания запроса:

"select name from users where id="+items[x]

Если элементы содержат строковое значение union select load_file('/var/passwd'), злоумышленник может прочитать произвольный файл в вашей системе. Это полезная нагрузка предполагает, что вы используете MySQL. Если бы элементы были списком целых чисел, то этот запрос не уязвим для внедрения SQL.

...