EJB3 SQL-инъекция - PullRequest
       16

EJB3 SQL-инъекция

0 голосов
/ 12 февраля 2012

Я хотел бы знать, насколько безопасен EJB3 для предотвращения SQL-инъекций.
Я читал, что использование подготовленных операторов довольно безопасно, но, например, с такой функцией

@Override
public Collection<Project> searchProjectsPerProfessorLastname(String lastname) {
    Query q = manager.createQuery("SELECT DISTINCT OBJECT(p) FROM Project p JOIN p.professors prof WHERE lower(prof.lastName) = ?1");
    q.setParameter(1, lastname.toLowerCase());
    @SuppressWarnings("unchecked")
    Collection<Project> c = q.getResultList();
    if(c.size()==0)
       return null;
    return c;
}

можно ли выполнить SQL-инъекцию?

Ответы [ 2 ]

1 голос
/ 12 февраля 2012

номер

Проще говоря, если вы не строите SQL динамически (а привязка не создает SQL), риск внедрения SQL отсутствует. Запретить глючный драйвер SQL.

Привязка - это метод назначения параметров операторам SQL через драйвер, а не путем простого создания текста SQL самостоятельно.

Разные драйверы делают разные вещи, но причина, по которой происходит внедрение SQL, заключается в том, что люди, создающие текст SQL, не принимают надлежащих мер предосторожности для предотвращения внедрения SQL (особенно экранирование специальных символов, таких как кавычки и тому подобное).

В идеале, драйвер позаботится о правильной сборке SQL. Но если драйвер каким-то образом глючит, есть риск. Я, лично, не сталкивался с драйвером, была ошибка, которая повлияла на это. Так что, хотя это возможно, это действительно очень отдаленно.

Наконец, для вашего примера, вы даже не используете SQL, вы используете EQL, который является языком запросов JPA. Это нужно еще раз перевести с EQL на SQL, что дает больше возможностей для промежуточного программного обеспечения (JPA и драйвера JDBC), чтобы предотвратить внедрение SQL.

0 голосов
/ 12 февраля 2012

Все параметризованные формы запросов вызовов JPA считаются безопасными от внедрения SQL.Однако вы можете создать строку запроса с конкатенацией, что было бы небезопасно.

...