我正在使用 Hibernate,我知道你可以使用 HQL 来防止 SQL 注入:
String query1 = "from Obj where id = "+ id;
String query2 = "from Obj where id = :id";
query1
不安全,同时query2
是安全的。
如何使用 Criteria 实现安全查询?这是否已经实施了还是我必须做其他事情?
Criteria c = session.createCriteria(Obj.class);
c.add(Restrictions.eq("id", 5));
我正在使用 Hibernate,我知道你可以使用 HQL 来防止 SQL 注入:
这是一个非常常见的误解,认为 ORM 解决方案(如 hibernate)可以防止 SQL 注入。 Hibernate允许使用“原生SQL”,并定义了一种专有的查询语言,命名为HQL(Hibernate Query Language);前者容易发生SQL注入,后者容易发生HQL(或ORM)注入。
来源:http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-hibernate http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-hibernate
如何使用 Criteria 实现安全查询?
就你的后一个问题而言,Criteria API(类似于PreparedStatement)对参数进行转义,不会导致恶意SQL被执行。
最重要的是,不要将应用程序的参数直接连接到查询中(并使用 Criteria、PreparedStatement),您的应用程序是安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)