Методы инъекций / переменные: общедоступные или нет? - PullRequest
3 голосов
/ 09 ноября 2010

Многие платформы Java позволяют объявлять члены класса, используемые для внедрения, закрытыми. Например, внедренные переменные в Spring и EJB 3 могут быть закрытыми. JPA позволяет защитить свойства персистентного класса или пакетно-приватные.

Мы знаем, что лучше объявить методы закрытыми, если вы можете. При этом, если я не ошибаюсь, предоставление этим структурам доступа к закрытым членам работает только с менеджером безопасности Java по умолчанию. Не означает ли это, что пользовательский код может также получить доступ к непубличному члену с помощью отражения, вызвав setAccessible (), , что поставит под угрозу безопасность ?

Что вызывает этот вопрос: какова наилучшая практика при настройке уровня доступа для методов инъекции?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Как правило, класс должен включить механизм постоянства. Например, для Java serialisatoin требуется класс для реализации java.io.Serializable. Классы, реализующие Serializable, несут ответственность за обеспечение их безопасности. Там, где библиотека позволяет копировать рядовые файлы через внешний файл конфигурации, этому нельзя доверять - рефлексия действительно опасна, и ее использование обычно испорчено.

Конечно, если вы обнаружите уязвимость, сообщите об этом в соответствующую группу.

1 голос
/ 09 ноября 2010

Если вы используете ненадежный код в той же JVM, что и ваше приложение, и используете настройки менеджера безопасности по умолчанию, то да, это может быть дырой в безопасности. Это то, что вам нужно знать, но на практике такая ситуация встречается довольно редко.

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