Насколько безопасен 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();