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

2024-01-04

为了避免sql注入,通常位置参数 and 命名参数可以在 HQL 中使用,因为它演示了here http://software-security.sans.org/developer-how-to/fix-sql-injection-in-java-hibernatestackoverflow 也有示例。我想知道什么时候可以采取哪些步骤Criteria使用。请提供示例代码或有用链接的任何帮助。

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

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

在这种情况下,我们是否应该在分配给对象之前单独检查用户输入?或任何其他步骤来避免此类 sql 注入?


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

你必须小心表达 http://docs.jboss.org/hibernate/orm/3.3/api/org/hibernate/criterion/Expression.html目的。您可以在那里创建 SQL 注入。 但看一下生成的 SQL:Hibernate 显示真实的 SQL https://stackoverflow.com/questions/2536829/hibernate-show-real-sql

edit:除非 Hibernate 中存在巨大的错误,否则您不必确保您的String在你拯救他们之前,他们已经逃脱了。 Hibernate 使用准备好的语句。因此,Hibernate 会话中没有字符串连接,也没有 SQL 注入。

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

class User{
    String name;
}

并且您调用用户“'或1=1;DROP DATABASE user;--”该字符串将存储在数据库中。 如果您使用 Criterion 对象查询 User,您将找到他(无需删除数据库)。如果使用 Expression 对象查询 User,则可以删除数据库(如果连接字符串)。

如果将用户名输出为 HTML,则必须转义输出。否则是一个有名字的用户"/><script>evilJavascript()</script>对你的申请不利。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Hibernate-Criteria 和 Session.save(object) 进行 SQL 注入 的相关文章

随机推荐