如果使用hibernate,SQL-Injection有多安全

时间:2012-03-07 05:44:09

标签: sql hibernate sql-injection

Hibernate是否警惕SQL injection attack?如果我正在使用hibernate那么我是否完全免受SQL注入攻击?我听说使用Hibernate执行使用用户输入构建的dynamic SQL statement可以允许攻击者修改语句的含义或执行任意SQL commands

2 个答案:

答案 0 :(得分:15)

  

Hibernate是否可以防范SQL注入攻击?

不,它不保护错误编写的,所以在编写查询时需要小心。始终使用预准备的语句样式,例如考虑以下 HQL 查询

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

query1 **仍然容易受到** SQL注入的影响,因为 query2 不是。

所以简而言之, hibernate为您提供了许多方法来保护自己免受SQL Injection attacks的攻击。<​​/ strong>

答案 1 :(得分:1)

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();