使用 Hibernate 防止 SQL 注入

2024-06-18

我正在使用 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(使用前将#替换为@)

使用 Hibernate 防止 SQL 注入 的相关文章

  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • PESSIMISTIC_WRITE 是否锁定整个表?

    只是为了确保我正确理解事情是如何运作的 If I do em lock employee LockModeType PESSIMISTIC WRITE 它会仅阻止该实体吗 employee 或整个表Employees 如果重要的话 我正在谈
  • Hibernate JOIN FETCH - 对象在结果集中出现多次

    我正在使用 Spring JPA 和 Hibernate 构建 REST API 我搜索了 2 天 但没有找到任何解决方案来解决这个问题 在某些查询中 我有多个 JOIN FETCH 子句 当我执行查询时 我的结果集中多次出现父对象 实际上
  • MySQL 和 Hibernate 之间的主键自增由谁负责?

    MySQL CREATE TABLE role id role INT 11 unsigned NOT NULL AUTO INCREMENT PRIMARY KEY id role AUTO INCREMENT 1 休眠 Entity p
  • Hibernate:hbm2ddl.auto=生产中更新?

    是否可以运行配置为 Hibernate 的应用程序hbm2ddl auto update在生产环境中更新数据库架构 不 这不安全 尽管 Hibernate 团队尽了最大努力 但您根本不能依赖自动更新生产中 编写您自己的补丁 与 DBA 一起
  • 使用除 SINGLE_TABLE 之外的任何其他 Hibernate 继承策略时 JVM 崩溃

    好吧 这可能不太可能 但还是这样吧 在Java JRE 1 6 0 26 b03 中我有两个类 SuperControl及其子类SubControl 它们都需要是持久对象 我正在使用 Hibernate Annotations 来实现这一点
  • 将 c3p0 与 Tomcat 8 数据源结合使用

    我有一个加载了数据源的 tomcat 8 服务器 我想知道是否可以将这个DataSource与c3p0连接池管理结合使用 到目前为止 这是我尝试过的 上下文 xml
  • 如何升级 Hibernate 4.3 --> 5.2?

    我用 Google 搜索了一下 但没有看到任何将 Hibernate 升级到 5 2 的教程 我唯一能找到的是 http hibernate org search documentation migrate 5 0 http hiberna
  • 如何映射 Map

    I tried ManyToMany cascade CascadeType ALL Map
  • 使用 Tomcat 和 gradle 进行休眠

    免责声明 我是 Java 新手 我正在尝试使用 Tomcat 和 Gradle 设置 Hibernate 构建运行正确 但看起来像persistence xml文件未被读取 我的项目结构如下 build gradle src main ja
  • JPA:实现模型层次结构 - @MappedSuperclass 与 @Inheritance

    我正在使用 Play Framework 1 2 4PostgreSQL and JPA 我想要一个模型层次结构 并看到有一些替代方法可以做到这一点 我有一个基类 它是抽象的 和两个扩展该基类的具体类 当我想要有具体的类时 我不想保留这个基
  • 为什么即使在Spring服务类的第二个方法中propagation=Propagation.REQUIRES_NEW时事务也会回滚?

    现在基本设置都OK了 我开始尝试交易 Struts Spring Hibernate注解事务管理器 这是Action中的示例代码 将调用一个服务类 userService addUser 这里是addUser 服务类中的方法 Transac
  • 配置hibernate通过JNDI数据源连接数据库

    大家好 我使用 Hibernate Struts2 Tomcat6 Mysql 作为我的 J2EE 框架 我一直在使用hibernate的内置连接池机制 但事实证明这是有问题的 mysql在8小时后关闭它的连接 不管怎样 我用谷歌搜索了一下
  • 如何在 Hibernate 中持久保存 Map>

    我有一个Map含有MyObject实例 这MyObject类使用 JPA 来保存其字段 OneToMany cascade CascadeType ALL LazyCollection LazyCollectionOption FALSE
  • 我需要 persistence.xml 中的 元素吗?

    我有非常简单的 persistence xml 文件
  • JPA/Hibernate 删除实体不工作

    我使用 Hibernate 的 JPA 接口 并且编写了一些简单的代码来从数据库加载实体 然后删除 删除 它 我对插入和更新实体的所有合并调用都运行良好 但是当我尝试删除实体时 Hibernate 不会将其从数据库中删除 也不会引发异常 我
  • JPA hashCode() / equals() 困境 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 曾经有过some https stackoverflow com questions 4762573 should embeddable jpa
  • Spring Hibernate 4 支持

    我正在使用 Hibernate 4 CR1 我的应用程序之前使用 Spring hibernate 支持 版本 3 我还没有找到任何相关信息 是否有任何迹象表明 Spring 何时 或哪个版本 将提供对 Hibernate 4 的支持 UP

随机推荐