数据持久层与 SQL 注入

使用 ORM(Object/Relation Mapping)框架对 SQL 注入是有积极意义的。我们知道对抗 SQL 注入的最佳方式就是使用“预编译绑定变量”。在实际解决 SQL 注入时,还有一个难点就 是应用复杂后,代码数量庞大,难以把可能存在 SQL 注入的地方不遗漏地找出来,而 ORM 框 架为我们发现问题提供了一个便捷的途径。

以 ORM 框架 ibatis 举例,它是基于 sqlmap 的,生成的 SQL 语句都结构化地写在 XML 文 件中。ibatis 支持动态 SQL,可以在 SQL 语句中插入动态变量:$value$,如果用户能够控制这 个变量,则会存在一个 SQL 注入的漏洞。

<select id="User.getUser" parameterClass="cn.ibatis.test.User" resultClass="cn.ibatis. 
test.User"> 
 select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name like '%'||#table_ 
name#||'%' 
 order by $orderByColumn$ $orderByType$ 
</select> 

而静态变量 #value# 则是安全的,因此在使用 ibatis 时,只需要搜索所有的 sqlmap 文件 中是否包含动态变量即可。当业务需要使用动态 SQL 时,可以作为特例处理,比如在上层的 代码逻辑中针对该变量进行严格的控制,以保证不会发生注入问题。

而在 Django 中,做法则更简单,Django 提供的 Database API,默认已经将所有输入进行 了 SQL 转义,比如:

foo.get_list(bar__exact="' OR 1=1")

其最终效果类似于:

SELECT * FROM foos WHERE bar = '\' OR 1=1'

使用 Web 框架提供的功能,在代码风格上更加统一,也更利于代码审计。

相关推荐

  1. 数据持久 SQL 注入

    2024-06-18 12:20:03       9 阅读
  2. MSsql数据库 sql注入

    2024-06-18 12:20:03       16 阅读
  3. SQL注入数据库基础)

    2024-06-18 12:20:03       13 阅读
  4. Access数据中的SQL偏移注入

    2024-06-18 12:20:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 12:20:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 12:20:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 12:20:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 12:20:03       20 阅读

热门阅读

  1. React useContext

    2024-06-18 12:20:03       6 阅读
  2. elementUI实现上传excel文件并传给后端

    2024-06-18 12:20:03       8 阅读
  3. 数据库-单表查询-基本查询

    2024-06-18 12:20:03       7 阅读
  4. GDB使用

    2024-06-18 12:20:03       6 阅读
  5. 量产导入 | ATPG_FLOW

    2024-06-18 12:20:03       10 阅读
  6. 【linux 常用命令】

    2024-06-18 12:20:03       7 阅读
  7. 编程从入门到精通:一段跌宕起伏的旅程

    2024-06-18 12:20:03       8 阅读
  8. 所有报表情况查询明细

    2024-06-18 12:20:03       7 阅读
  9. 【C++】内存管理

    2024-06-18 12:20:03       11 阅读
  10. SQL 入门教程

    2024-06-18 12:20:03       6 阅读
  11. Docker容器技术在Linux平台的应用与实践

    2024-06-18 12:20:03       8 阅读
  12. 【MySQL】——概念、逻辑、物理结构设计

    2024-06-18 12:20:03       8 阅读
  13. vue跨域问题,请注意你的项目是vue2还是vue3

    2024-06-18 12:20:03       9 阅读