当前位置: 首页 > java >正文

SQL 注入:JDO与Hibernate

问题1:
JDO(Java Data Object ) Java 对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的
标准化 API
JDO 提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如 JDBC
API 的使用)。这些繁琐的例行工作已经转移到 JDO 产品提供商身上,使开发人员解脱出来,从而集中时间
和精力在业务逻辑上。另外, JDO 很灵活,因为它可以在任何数据底层上运行。 JDBC 只是面向关系数据库
RDBMS JDO 更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、 XML 以及对象数据库
ODBMS )等等,使得应用可移植性更强。
应用程序的开发人员通过访问 JDO Instance , 达到访问 JDO Instance 所代表的数据对象 , 包括 :ERP,
据库系统等 . 使数据的存储介质对于应用的开发人员完全透明 .
JDO 最早是由 Sun 召集众多的 O/R Mapping 开发团队集中起来共同提出的,首先是通过会议确定了
JDO 需要包括的内容,然后正式提出一个 Java 规范请求( JSR-12 ),正式开始了 JDO 规范的制定。
基于内存( JDO )、存储数据实现 sql 注入
问题2:
基于持久化数据的 sql 注入
持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中
的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。
持久化( Persistence ),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持
久化的主要应用是将内存中的对象存储在的数据库中,或者存储在磁盘文件中、 XML 数据文件中等等。
持久化是将程序数据在持久状态和瞬时状态间转换的机制。
JDBC 就是一种持久化机制。文件 IO 也是一种持久化机制。由于 hibernate 代码可能会使用字符串的方式进行拼接 sql 代码导致 sql 注入
修复:
使用 ESAPI 进行修复
Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得
Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。
在获取便利操作的同时, SQL 的注入问题也值得我们的密切注意,下面就来谈谈几点如何避免
SQL 注入:
1. 对参数名称进行绑定:
Query query=session.createQuery(hql);
query.setString(“name”,name);
2. 对参数位置进行邦定:
Query query=session.createQuery(hql);
query.setString(0,name1);
query.setString(1,name2);
...
3.setParameter() 方法:
Query query=session.createQuery(hql);
query.setParameter(“name”,name,Hibernate.STRING);
4.setProperties() 方法:
Entity entity=new Entity();
entity.setXx(“xx”);
entity.setYy(100);
Query query=session.createQuery(“from Entity c where c.xx=:xx and c.yy=:yy ”);
query.setProperties(entity);
5.HQL 拼接方法,这种方式是最常用,而且容易忽视且容易被注入的,通常做法就是对参数的特
殊字符进行过滤,推荐大家使用 Spring 工具包的 StringEscapeUtils.escapeSql() 方法对参数进行过滤:
public static void main(String[] args) {
String str = StringEscapeUtils.escapeSql("'");
System.out.println(str);
}
http://www.xdnf.cn/news/12944.html

相关文章:

  • @Lazy原理与实战
  • 商品中心—1.B端建品和C端缓存的技术文档二
  • 【动态规划】B4336 [中山市赛 2023] 永别|普及+
  • 【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
  • 总结___
  • CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
  • python基础day06
  • 【大模型:知识库管理】--开源工具Ragflow构建知识库
  • 多核处理器系统中内存一致性问题举例
  • 记录一次opengl显示不出物体的错误原因
  • Vite中定义@软链接
  • 【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
  • 期货与期权市场基本原理是什么?
  • CSS设置元素的宽度根据其内容自动调整
  • 基于django+vue的健身房管理系统-vue
  • 等待组(waitgroup)
  • 【JVM】- 内存结构
  • 【python异步多线程】异步多线程爬虫代码示例
  • 电子电路中隔离的隔离技术​
  • 力扣-35.搜索插入位置
  • 数据挖掘是什么?数据挖掘技术有哪些?
  • 技术栈RabbitMq的介绍和使用
  • React事件处理:如何给按钮绑定onClick点击事件?
  • 【技巧】dify前端源代码修改第一弹-增加tab页
  • 聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
  • uni-app学习笔记三十四--刷新和回到顶部的实现
  • llama-factory微调大模型环境配置避坑总结
  • Python应用输入输出函数
  • 曼昆《经济学原理》第九版 第十章外部性
  • 机器学习笔记【Week8】