【SQL注入】代码安全审计经验分享

news/2024/11/16 16:45:26/文章来源:https://www.cnblogs.com/o-O-oO/p/18365799

一、MyBatis框架中的注入漏洞

Mybatis框架支持的CURD功能可以直接搜索XML文件中的${和${}拼接的SQL语句,如果SQL的参数可控,就可能造成注入风险。

另外,有的SQL语句使用的是注解开发,把SQL语句可以直接写在了代理接口方法上方,审计的时候可以将两种情况都注意一下,或许有不同的发现。

安全的方式应该是使用#号接收参数,但很多时候如数据库表的字段名,又只能使用$符接收参数。
白名单的方案是可以将数据库表的字段名维护为一个数组,再检查参数是否在数组内,经过拼接的payload就不能通过检查, 例如:对于排序,只用了到ASC、DESC中的一个,把这两做成白名单即可,SQL注入的payload不在这个名单中,在反序列化时就会被拦截。

二、JPA中的SQL注入

JPA受SpringBoot官方支持直接提供启动依赖,和MyBatis一样,JPA框架方便开发人员完成与数据库的各种交互操作。

对于JPA中的SQL注入,一般出现时使用的是+号直接拼接。

安全的方式应该用冒号或者问号进行参数绑定:

三、无法利用的SQL注入

在文章开头提到,如果SQL参数可控可能造成注入风险,即使直接拼接到SQL语句的参数可控,也并不意味着这个SQL注入漏洞可以被利用。

比如前端将JSON传送到后端后,会有一个反序列化的操作,将JSON串反序列化为目标类,期间会有一个数据类型转换过程。

查看如下两个字段在实体类的定义,发现是int类型,但是SQL注入的payload是字符串类型(形如”OR IF(SLEEP(5), 0, 1)--+"的字符串),数据类型不匹配,在反序列化这一步的数据类型转换就通过不了,因此这个注入漏洞并不能利用。
的参数可控,就可能造成注入风险。

原创 洞源实验室

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/790199.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-08-31:用go语言,给定一个数组apple,包含n个元素,每个元素表示一个包裹中的苹果数量; 另一个数组capacity包含m个元素,表示m个不同箱子的容量。 有n个包裹,每个包裹内装有

2024-08-31:用go语言,给定一个数组apple,包含n个元素,每个元素表示一个包裹中的苹果数量; 另一个数组capacity包含m个元素,表示m个不同箱子的容量。 有n个包裹,每个包裹内装有指定数量的苹果,以及m个箱子,每个箱子的容量不同。 任务是将这n个包裹中的所有苹果重新分配…

主元素问题(C语言)

主元素问题(C语言) 题目参考代码 #include <stdio.h> int main() {// 主元素问题int n, s[400002], num = 1, max = 0, maxNum = 0;scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &s[i]);for (int i = 0; i < n; i++) //…

如何在愈发激烈的2025广西南宁中考中生存下来

背景 以2024年为例 吃了择校的亏 七年级结束后,北宁市教育局突然通知北宁市的X中学和S学校转为公办。 近年来教育改革过程中,我确实没有吃到这个时代发展的红利,反观北宁市的一些高中越来越卷,逐渐衡水化。 要求 考前学科答题规范讲座(语文主讲:南宁二中申颖老师):不要…

Markdown学习20221418曾庆林

一、我掌握的内容 1.Markdown及其基本的语法(标题,有序列表,代码) 2.线下工具vscode 二、我没有掌握的内容 1.markdown详细语法(斜体,无序列表,链接,引用,分割线,表格) 2.线上工具 3.插入公式,绘图,格式转换 4. ChatGPT 等 AIGC 的提示词工程中的应用 三、实践 斜…

20221421李旻奇Markdown学习

问题1:哪些内容是你掌握的?哪些内容是你没有掌握的?使用AI推荐的工具或者你喜欢的工具实践一下没有掌握的内容 本次学习使用ChatGPT回复 我掌握的 Markdown是一种轻量级的标记语言,用于格式化文本。它的设计目标是使文本在不需要复杂工具的情况下能保持良好的可读性和可写性…

回顾一些常识————环境变量

前言 最近写一些底层一些的东西,简单回顾一下环境变量. 正文 首先我们来看下c 语言的环境变量的位置。可以看到每个进程都有自己的环境变量,操作系统会复制环境变量的副本给一个新创建的进程。 那么这个副本哪里来呢? 是操作系统自己维护一份在内存中吗?那不是,因为操作系…

win7系统更新在哪里,win7怎么关闭电脑更新呢

在Windows 7系统中,进行系统更新和关闭更新的操作主要通过“控制面板”来完成。以下是详细的步骤: 一、Win7系统更新在哪里 打开控制面板: 点击屏幕左下角的“开始”菜单,选择“控制面板”。 进入Windows Update: 在控制面板中,找到并点击“系统和安全”类别。 在“系统和…

8.Java异常

什么是异常实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了,等等。 软件程序在…

20221325-杨筱-Markdown学习

AI回答提示词: (1)深入浅出的讲解Markdown及其详细语法 Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,并通过简单的标记语法快速转换为格式丰富的HTML页面。Markdown被广泛应用于博客、文档编写、GitHub等平台,因其简洁的语法和高效的排版…

windows更新在哪里打开,想更新windows怎么打开更新呢

在Windows系统中,打开更新并更新电脑主要可以通过“设置”应用来完成。以下是详细的步骤: 一、打开Windows更新 通过“开始”菜单: 点击屏幕左下角的“开始”按钮(Windows徽标)。 在弹出的菜单中,选择“设置”图标(齿轮形状)。进入“更新和安全”设置: 在“设置”窗口…