gpt4 book ai didi

java - 通过 Hibernate-Criteria 和 Session.save(object) 进行 SQL 注入(inject)

转载 作者:搜寻专家 更新时间:2023-10-31 19:48:30 26 4
gpt4 key购买 nike

为了避免 sql 注入(inject),通常 位置参数命名参数 可以在 HQL 中使用,因为它演示了 here stackoverflow 也有样本。我想知道使用 Criteria 时可以采取哪些步骤。请提供有关示例代码或有用链接的任何帮助。

编辑
另外当我们保存一个对象时呢?比方说,该对象可能有一个 String 变量,并且有人可以为它分配一个易受攻击的 sql 查询。

 myObject.setName(somevulnerablesql); session.save(myObject); 

在那种情况下,我们是否必须在分配给对象之前单独检查用户输入?或任何其他避免此类 sql 注入(inject)的步骤?

最佳答案

我非常确定 Criteria-Object 将创建安全的 HSQL。

你必须小心 Expression目的。您可以在那里创建 SQL 注入(inject)。但是看看生成的 SQL:Hibernate show real SQL

编辑:除非 Hibernate 中存在巨大错误,否则您不必确保您的 String 是正确的。 s 在你保存它们之前被转义。 Hibernate 使用准备好的语句。因此,没有字符串连接,也没有 Hibernate session 的 SQL 注入(inject)。

在使用 Hibernate 读取输出后,您可能必须转义输出。例如:你有一个实体用户

class User{
String name;
}

然后您调用用户 "' or 1=1;DROP DATABASE user;--"该字符串将存储在数据库中。如果您使用 Criterion 对象查询用户,您将找到他(不会删除数据库)。如果您使用 Expression 对象查询 User,您可能会删除数据库(如果您连接字符串)。

如果将用户名输出到 HTML,则必须对输出进行转义。否则名称为 "/><script>evilJavascript()</script> 的用户对您的申请不利。

编辑 2:看看这里:https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

关于java - 通过 Hibernate-Criteria 和 Session.save(object) 进行 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10122894/

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