Каковы проблемы безопасности, на которые мне нужно обратить внимание с помощью Java Persistence API (JPA) - PullRequest
5 голосов
/ 13 декабря 2010

Я начинаю изучать JPA, и у меня есть значительное количество унаследованного кода EJB2.0, который необходимо реорганизовать для использования новых функций, а также любых новых функций, которые я добавлю в базу кода.Существуют ли новые векторы атак, которые я должен учитывать в своем коде, или защитное программирование охватит меня?

Ответы [ 2 ]

6 голосов
/ 13 декабря 2010

JPA похож на JDBC: бэкэнд-технология.Те же самые проблемы безопасности, которые относятся к JDBC, относятся и к JPA.Таким образом, большая часть соображений безопасности будет реализована на уровне приложений или обрабатывается интерфейсными API.Но на самом деле JPQL-инъекция очевидна.

JPQL-инъекция:

Так же, как при использовании SQL или JDBC API, вы никогда не должны добавлять напрямуюваши параметры в строке запроса.Вы должны работать с setParameter для объекта Query (применяется как к adhoc, так и к именованным запросам), или вы можете использовать API критериев JPA (хотя именованные запросы обеспечивают лучшую производительность).

Query query = em.createQuery("DELETE Order WHERE customer = :customer");
query.setParameter("customer", customer);
query.executeUpdate();

Права базы данных:

Для дополнительной безопасности вы можете создать несколько постоянных единиц (PU), чтобы влияние любых нарушений безопасности было ограничено.Например, вы можете создать несколько PU с разными правами доступа к базе данных: один с правами на обновление, а другой с доступом только для чтения.Просто осознайте, что подобные решения повлияют на дизайн вашего приложения.

1 голос
/ 14 декабря 2010

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

Если ваш путь к классам включает в себя общеизвестные общедоступные классы с неограниченными правами доступа, такие как интерпретатор Rhino, поставляемый с последними версиями JVM, или интерфейс javax.tools для javac, AND , то эти полномочия доступны через конструктор Сериализуемый класс, то злоумышленник может использовать его для выполнения произвольного кода Java. На практике это означает произвольный код звонка пользователя с привилегиями текущего пользователя через java.lang.Runtime.

Первый критерий легко соблюдается. Второй, вероятно, гораздо менее легко встречается.

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