Насколько безопасен SQL-инъекция при использовании спящего режима

Защищает ли Hibernate от SQL injection attack? Если я использую hibernate, то я полностью безопасен от SQL-инъекции? Я слышал, что использование Hibernate для выполнения dynamic SQL statement, созданного с использованием пользовательского ввода, может позволить злоумышленнику изменить значение оператора или выполнить произвольное SQL commands.

Ответы

Ответ 1

Защищает ли Hibernate от атаки SQL-инъекции?

Нет, это не защищает неправильно написанные. Поэтому вам нужно быть осторожным при написании запросов. Всегда используйте подготовленный стиль инструкции, например, рассмотрите ниже HQL запросы,

String query1 = "select * from MyBean where id = "+ id;
String query2 = "select * from MyBean where id = :id";

query1 ** все еще уязвим для ** SQL Injection, где query2 нет.

Итак, коротко hibernate предоставляет вам множество способов, которые вы должны использовать для защиты от атак SQL Injection.

Ответ 2

1 Позиционный параметр в HQL

Query hqlQuery = session.createQuery("from Orders as orders where orders.id = ?");

List results = hqlQuery.setString(0, "123-ADB-567-QTWYTFDL").list();

2 Именованный параметр в HQL

Query hqlQuery = session.createQuery("from Employees as emp where emp.incentive > :incentive");

List results = hqlQuery.setLong("incentive", new Long(10000)).list();