通过 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 注入 的相关文章

  • String.split() 的 ArrayIndexOutOfBoundsException

    这是从文件中读取输入的代码 该文件包含表单中的学生详细信息roll name age street city zipcode 其中很少有值可以null even 对于以下代码 我得到java lang ArrayIndexOutOfBoun
  • 使用桌面的默认应用程序打开存储在 jar 文件中的 PDF 文件

    我的计算机科学课程的程序开发即将结束 然而 要求之一是应用程序内有一份用户手册 我在 Eclipse 工作区中将用户手册保存为 PDF 它存储在 Documents PDF Manual pdf 下 我最初使用这段代码 URL url ge
  • 树形表的sql查询

    我有一个树形结构的表 id parentId name 1 0 Category1 2 0 Category2 3 1 Category3 4 2 Category4 5 1 Category5 6 2 Category6 7 3 Cate
  • 使用 Netbeans 导出 JAR

    如何使用Netbeans将java项目导出到JAR 我找不到像 Eclipse 那样的选项 您需要启用该选项 Project Properties gt Build gt Packaging gt Build JAR after compi
  • Java 更改包名称大小写约定的原因

    就在你说这是重复的之前 我已经看到了其他问题 但我仍然想发布这个 所以我在读用 Java 思考 Bruce Eckel这段话是关于小写命名约定的 Java 1 0 和 Java 1 1 中的域扩展com edu org net等 按照惯例都
  • 异步方法的默认 EJB 事务模式?

    当我有一个 AsynchronousEJB 中的方法 并且我没有指定 TransactionAttribute 那么容器到底是如何处理事务边界的呢 显然 它不能使用调用线程的事务 那么它是做什么的呢 同样的问题 但涉及由 TimerServ
  • 在手机上单步执行 Android 代码 - 大行号差异

    我正在尝试调试与 Samsung Captivate Galaxy S 上的 ListView 相关的一些代码 我在代码中的某个位置放置了断点 当它停止时 我会在堆栈上返回几帧到 ListView 源 现在 我可以预期会出现一些不匹配的情况
  • 如何按照最初给出的时区存储和显示日期?

    我有一台服务器正在从不同时区的客户端提供数据 数据源包含人物 他们的出生日期和其他事件日期 出于我们的目的 如果我们可以将日期存储为给我们的日期 那就很方便了 例如 如果客户位于加利福尼亚州 并且告诉我们该人的出生日期是 5 月 31 日
  • 计算两个 Java 日期实例之间的差异

    我正在使用Java的java util DateScala 中的类并想要比较Date对象和当前时间 我知道我可以使用 getTime 计算增量 new java util Date getTime oldDate getTime 然而 这只
  • SAP Spartacus 表单个性化

    如果已经有使用给定电子邮件注册的帐户 我需要修改注册表以显示错误消息 SAP Hybris 后端 Angular 中的 Spartacus 店面 目前 我有一个自定义验证器类 它可以正常工作 import org springframewo
  • 从 all_tab_columns 中选择,其中表有 > 0 行

    我需要在大型数据库中搜索与列名匹配的表 但该表必须有超过 0 行 顺便说一句 这是查询 SELECT FROM all tab columns WHERE column name LIKE ID SUPPORT 您可以使用单个查询来过滤名称
  • JPanel 上的圆形边框

    我这里得到的是一个带有圆形边框的 JPanel 其设置如下 panel setBorder new LineBorder PanelColor 5 true 问题是 在每个角上都有 2 条从外角到内角的对角不透明线 即边框的长度 边界后面的
  • 如何模拟类路径上属性文件的存在?

    这肯定是一个常见问题 我有一个像这样的属性文件my settings properties由应用程序类读取 当我编写测试类时 它需要测试可能存在的不同场景my settings properties为了确保最大的代码覆盖率 例如空属性文件
  • Gradle:找不到受信任的证书

    我正在尝试使用 Gradle 在 Ubuntu 服务器上构建我的 Android 项目 在我的 Windows 10 PC 上使用 Android Studio 构建工作正常 但使用 gradlew build or gradlew cle
  • 使用三十、LocalDate 获取每月的第一天和最后一天

    我有一个 LocalDate 需要获取该月的第一天和最后一天 我怎么做 eg 13 2 2014我需要得到1 2 2014 and 28 2 2014 in 本地日期 https docs oracle com javase 8 docs
  • Android 折叠工具栏在折叠时没有隐藏其他元素

    我在 Android 上有一个布局 支持设计折叠工具栏 其中包含 TextView 但是当我折叠工具栏时 一些带有工具栏标题的 TextView 我想隐藏所有其他内容 而不是工具栏和标题 这是我的布局
  • 数组 (UUID[ ]) 会破坏 1NF 吗?

    我的问题是包含 UUID 数组的字段是否会破坏范式 http en wikipedia org wiki Database normalization 在包含数组之前位于 NF 中的表中 原表 CREATE TABLE Floor Floo
  • Resilience4j 重试 - 记录来自客户端的重试尝试?

    是否可以使用resilience4j在客户端记录重试尝试 也许通过某种配置或设置 目前 我正在将resilience4j与Spring boot Webflux一起使用基于注释 它运作良好 该项目很棒 当我们将服务器日志放在服务器端时 为了
  • 无法在 Windows 7 64 位中正确设置 java 路径

    我已经在计算机中安装了 java 1 6 并且还使用高级变量设置设置了路径 当我尝试执行 java 时 在命令提示符下出现此错误 Error could not open C Program Files Java jre7 lib amd6
  • JavaFX - 当文本字段具有焦点时加速器不工作

    在我的应用程序中 我有一个使用加速器的屏幕 我正在使用功能键 F3 在我的应用程序中执行操作 它每次都工作正常 但是当我单击此屏幕上的任何文本字段时 功能键不会执行 这是我设置加速器的代码 scene getAccelerators put

随机推荐