gpt4 book ai didi

hibernate - 使用 Hibernate 防止 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-02 17:32:28 25 4
gpt4 key购买 nike

我正在研究 Hibernate,我知道您可以使用 HQL 防止 SQL 注入(inject):

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

最佳答案

I'm going through Hibernate and I know that you can prevent SQL injection with HQL:

一个非常普遍的误解是 ORM 解决方案(如 hibernate)是 SQL 注入(inject)证明。 Hibernate允许使用“原生SQL”,定义了专有的查询语言,命名为HQL(Hibernate Query Language);前者容易出现SQL注入(inject),后者容易出现HQL(或ORM)注入(inject)。来源:http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-hibernate

How can I achieve safe queries with Criteria? 

就你后一个问题而言,Criteria API(类似于PreparedStatement)对参数进行了转义,不会导致恶意SQL执行。

底线是不要将应用程序的参数直接连接到查询中(并使用 Criteria、PreparedStatement),您的应用程序是安全的。

关于hibernate - 使用 Hibernate 防止 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com