当前位置: 首页 > 面试题库 >

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

孔理
2023-03-14
问题内容

为了避免sql注入,通常在HQL中可以使用 位置参数命名参数 ,因为它在此处进行演示,并且stackoverflow也有示例。我想知道什么时候可以使用哪些步骤Criteria。请提供示例代码或有用链接的任何帮助。

还当我们保存对象时 编辑 吗?假设该对象可能具有String变量,并且有人可以为其分配易受攻击的sql查询。

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

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


问题答案:

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

您必须注意Expression对象。您可以在此处创建SQL注入。但是看看生成的SQL:Hibernate显示真实的SQL

编辑:
除非在Hibernate中有一个巨大的错误,否则您不必确保String在保存它们之前将其转义。Hibernate使用准备好的语句。因此,Hibernate会话没有字符串连接,也没有SQL注入。

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

class User{
    String name;
}

然后将用户称为“’或1 = 1; DROP
DATABASE用户;-”,该字符串将存储在数据库中。如果用“标准”对象查询“用户”,则会找到他(无需删除数据库)。如果使用Expression对象查询User,则可以删除数据库(如果您包含字符串)。

如果将用户名输出为HTML,则必须转义输出。否则,具有名称的用户"/><script>evilJavascript()</script>将对您的应用程序不利。

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



 类似资料:
  • 当为 SELECT、 UPDATE 或 DELETE 创建动态 SQL 时,可能需要编写复杂的 WHERE 子句。 也可以使用拼接字符串构建这些语句,但避免语法错误是很繁琐的事且容易遭到 SQL 注入攻击。 使用参数化可以解决 SQL 注入问题,但为了添加参数需要过多的手动工作。 幸运的是,Serenity 有一个条件系统(criteria system),可以帮助你用类似 LINQ 表达式树的方

  • 问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。

  • 问题内容: 在PHP中,我知道这比使用更加安全。但是,我找不到让SQL注入发生的情况的示例。 谁能举一些例子? 问题答案: 基本上,攻击的工作方式是通过在多字节字符的中间放置反斜杠,从而使反斜杠成为有效的多字节序列的一部分而失去其含义。 本文的一般警告: 对于任何以有效多字节字符结尾的字符编码,这种攻击都是可能的,因为 可以诱使他们创建有效的多字节字符,而不是转义后面的单引号。UTF-8不适合此描

  • 问题内容: 到目前为止,我已经看到了同步块的用法,但是最近我了解到最好使用伪对象。我发现以下与此相关的主题。 Java同步方法锁定对象还是方法? 作为总结,在下面的代码中,两个不同的对象不能同时运行addA和addB,因为两者都使用此方法进行锁定。 如果我将虚拟对象用于锁定,我会感到困惑,如果在两种方法中使用下面的行进行同步,会有什么不同?因为它们仍然具有相同的锁。 那么,对于每个与sycnhro

  • 问题内容: 我想在Hibernate Projection List中使用嵌套对象值。我有OneToMany和ManyToOne关系的Pojo“ Charge”和“ Tariff”课程。 我的示例代码如下: 收费 关税 我想按收费模式从关税中提取金额值。 我写的SQL标准,即工作。 选择charge.amount,charge.name从charge,tariff那里的charge.name喜欢’

  • 问题内容: 我在优化Hibernate查询以免执行联接或辅助选择时遇到了麻烦。 执行Hibernate查询(条件或hql)时,例如: …,而where子句检查不需要与其他表进行任何联接的属性…,但是Hibernate仍与其他表进行完全联接(或辅助选择,具体取决于我如何设置fetchMode)。 有问题的对象(GiftCard)有几个ManyToOne关联,在这种情况下(但不一定是所有情况),我希望