Java代码审计安全篇-常见Java SQL注入

前言:

        堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油

注意:

本文章参考qax的网络安全java代码审计,记录自己的学习过程,还希望各位博主 师傅 大佬 勿喷,还希望大家指出错误

1.SQL语句参数直接动态拼接

常见的的执行语句为Statement执行SQL语句

例如下面这段代码:

<%  //驱动程序名   
        String driverName = "com.mysql.jdbc.Driver";  
        //数据库用户名   
        String userName = "root";  
        //密码   
        String userPasswd = "root";  
        //数据库名   
        String dbName = "javasqltest";  
        //表名   
        String ID = '1'
        //联结字符串   
        String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="  
                + userName + "&password=" + userPasswd;  
        Class.forName("com.mysql.jdbc.Driver").newInstance();  
        Connection connection = DriverManager.getConnection(url);  
        Statement statement = connection.createStatement();  
        String sql = "SELECT * FROM  people where id = " +ID ;  
        ResultSet rs = statement.executeQuery(sql);  
    %>  

 打印出来的结果如图下所示

数据库数据:

我们发现 像这种情况就是由SQL语句参数直接动态拼接成的,这样的话参数ID可控并且可以执行sql语句的拼接,存在明显的SQL注入漏洞

String sql = "SELECT * FROM  people where id = " +ID ;  

我们测试验证 一下 传入参数为  

1 and 1= 1

果然存在漏洞,这样就有个严重 的问题 当输入1 or 1 = 1就会打印所有的表的数据 ,造成数据泄露

 1 or 1=1

2.预编译有误

首先预编译处理就是将一些灵活的参数值以占位符?的形式给代替掉,我们把参数值给抽取出来,把SQL语句进行模板化。让MySQL服务器执行相同的SQL语句时,不需要在校验、解析SQL语句上面花费重复的时间

public void test1() throws Exception {

        // 获取连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?useServerPrepStmts=true", "root", "admin");

        String sql = "select * from user where id = ?";

        PreparedStatement ps = connection.prepareStatement(sql);

        ps.setInt(1, 1);

        // 执行查询,获取结果集
        ResultSet rs = ps.executeQuery();

        //遍历查询结果集
        while (rs.next()) {
            System.out.println(rs.getObject("id")+"---"+rs.getObject("username"));
        }
        rs.close();
        ps.close();

    }

那么预编译有误这个很好理解,就是使用错了编程方式,也就是采用了动态拼接

 

     上述代码就是典型的预编译错误编程方式,虽然id参数使用了PrepareStatement进行SQL查询,但是后面的usermame使用了SQL语句拼接的方式“sql += " and usermame like%”+username +.""%"";"",将username参数进行了拼接,这样导致了SQL注入漏洞的产
生。传入的username值为“"user% or T'=1"#""
 

3.order by 注入 

就是即使是标准的预编译处理也难以防止sql注入,因为某些情况下是不能使用预编译处理的,只能采用字符串拼接处理 像order by 注入

原理:

SQL中:ORDER BY执行排序后面需要指定列名,该列名是不能被引号包含的否则就会被认为是一个字符串。

所以进行ID拼接的时候就出现了 sql注入

4. %和_模糊查询

首先明白这两个通配符的作用

_:任意一个字符,
%:任意0或多个字符。

 下面举例 例如查询名字为root的用户 得到

我们填入r试试

 

查询不到 但是因为在java中预编译查询不会对%和_ 进行转义,而它们又是like查询的通配符,所以出现了漏洞,我们输入 

username=r%

能够得到root的全部信息

 

所以只能手动过滤_和% 

5.MyBatis中的#{}和${}

1、#{}表示一个占位符号 相当于 jdbc中的 ? 符号
#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?

2、${}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:select * from user where id= #{user_id},如果传入的值是11,那么解析成sql时的值为where id="11" ,

     就是说使用#{}方法更为安全 ${}方法不安全 ,因为在MyBatis中像order by 查询,like查询,in参数等都只能采用拼接方式 ,要确切的查询只能用到${},所以就会出现sql注入 ,所以得采用手动过滤的方法进行修复  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity L屏幕实现方式(已抛弃)

效果 右侧主要的参数&#xff1a;Line参数能够调整中间线的高度&#xff0c;PointXY能够调整整个下方弯曲图像的比例。 使用的是RenderTexture填充RawImage显示的方式&#xff0c;需要将一张RenderTexture设置位摄像机的输出内容。 ShaderGraph 由于这个采用了一定的数学模型…

「蓝桥·算法双周赛」第七场分级赛——小白入门赛

题目列表 说明 好久没打蓝桥杯的比赛&#xff0c;回来试试水&#xff0c;就开了第1、2、3一共三个题&#xff0c;第4题可惜了。1.thanks,mom【算法赛】 思路&#xff1a; 没什么好说的&#xff0c;但是当时比赛刚开始服务器有问题&#xff0c;基本提交的全WA了。#include <…

测试工具使用技巧01-->jmeter链接mysql

前言 在做接口或者性能测试的时候&#xff0c;有时需要jmeter连接数据库做操作&#xff0c;可以看看如下实例。操作实例 在mysql数据库中有如下数据表 在jmeter导入jdbc驱动插件&#xff08;需要的留言找我拿&#xff09; 在jmeter测试计划元件最下面&#xff0c;导入jdbc.…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——03.差异表达基因筛选(2)

内容如下&#xff1a; 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

React__ 二、React状态管理工具Redux的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言redux状态管理安装redux创建文件 并使用传参action 总结 前言 redux状态管理插件的使用 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考…

VRRP与BFD在项目中的结合使用

学习目标&#xff1a; 1. VRRP双网关热备份怎样部署&#xff1f; 2. BFD是一种怎样的检测技术&#xff1f; 3. VRRP与BFD联动实现故障的快速切换&#xff1b; 虚拟一个192.168.1.1的网关&#xff1a; 虚拟路由器冗余协议&#xff1a;VRRP 人为调节角色选举 流量分担是可以的&…

【蓝桥杯】蓝桥杯算法复习(一)

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

图分割 Graph Partition 学习笔记1

文章目录 前言一、graph-partition是什么&#xff1f;二、具体分类三、graph-partition的意义参考链接 前言 最近在学习图论划分的方法&#xff0c;碰巧搜索到了这个算是对我而言全新的一个体系&#xff0c;在这里将逐步记载自己的学习资料和进度&#xff0c;希望和大家一起探讨…

深度学习相关概念及术语总结

目录 1.CNN2.RNN3.LSTM4.NLP5.CV6.正向传播7.反向传播8.sigmoid 函数9.ReLU函数10.假设函数11.损失函数12.代价函数 1.CNN CNN 是卷积神经网络&#xff08;Convolutional Neural Network&#xff09;的缩写。卷积神经网络是一种深度学习模型&#xff0c;专门用于处理具有网格状…

华容道问题求解_详细设计(四)之查找算法2_BFS

&#xff08;续上篇&#xff09; 利用BFS查找&#xff0c;会找到最短路径&#xff08;没有权重的图&#xff09;&#xff0c;这个道理比较简单&#xff0c;这是由于寻找路径的方法都是从起点或者接近起点的位置开始的。查找过程如果画出图来&#xff0c;类似于一圈圈的放大&…

数据分析-Pandas最简单的方法画矩阵散点图

数据分析-Pandas直接画矩阵散点图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

数学建模理论与实践国防科大版

目录 1.数学建模概论 2.生活中的数学建模 2.1.行走步长问题 2.2.雨中行走问题 2.3.抽奖策略 2.4.《非诚勿扰》女生的“最优选择” 3.集体决策模型 3.1.简单多数规则 3.2.Borda数规则 3.3.群体决策模型公理和阿罗定理 1.数学建模概论 1.数学模型的概念 2.数学建模的概…

【理解指针(1)】

理解指针&#xff08;1&#xff09; 1什么是内存2指针变量和地址21 取地址操作符&#xff08;&&#xff09;22 指针变量23 解引用操作符&#xff08;*&#xff09;24 指针变量的大小 3指针变量的意义31指针的解引用32 指针加减整数33 void* 指针 4. const 修饰指针41 const…

和数软件:区块链技术的爆发与冲击

什么是区块链&#xff1f;它是如何发展而来的&#xff1f;应用在哪些领域&#xff1f;将会对我国的社会经济产生哪些重大影响&#xff1f; 什么是区块链 区块链作为一种底层技术&#xff0c;最早的实践是数字货币。根据最早的中本聪定义&#xff0c;区块链实质上是一种基于网…

202109 CSP认证 | 脉冲神经网络

3. 脉冲神经网络 好久之前第一次写的时候完全对第三题没感觉&#xff0c;提交上去得了个0 分… 这次自己再写了一遍&#xff0c;花的时间不多&#xff0c;写的时候感觉逻辑也不是特别难。最后是超时了&#xff0c;感觉第三题开始涉及到优化了&#xff0c;不仅仅是暴力模拟就可以…

纪年哥的文物挽救木牌

左&#xff08;江南制造局&#xff0c;曾国藩书天道酬勤&#xff0c;李鸿章少荃印&#xff0c;光绪三十四年制造&#xff09; 中&#xff08;汉阳兵工厂&#xff0c;民国二十六年制造&#xff0c;公元1937年七月七日&#xff0c;抗日战争全面爆发&#xff09; 右&#xff08;…

二 centos 7.9 磁盘挂载

上一步 一 windso10 笔记本刷linux cent os7.9系统-CSDN博客 笔记本有两个盘,系统装在128G的系统盘上,现在把另外一个盘挂载出来使用 lsblk 发现磁盘已经分好了,直接挂载就好了,参考文章:Centos7.9 挂载硬盘_centos7.9挂载硬盘-CSDN博客 永久挂载 lsblk -f分区格式化 mkfs…

upload-labs通关记录

文章目录 前言 1.pass-012.pass-023.pass-034.pass-045.pass-056.pass-067.pass-078.pass-089.pass-0910.pass-1011.pass-1112.pass-1213.pass-1314.pass-1415.pass-1516.pass-1617.pass-1718.pass-1819.pass-19 前言 本篇文章记录upload-labs中&#xff0c;所有的通过技巧和各…

首席翻译张璐老师,今年见不到了

她是我的偶像&#xff0c;张璐&#xff0c;连续多年在重量级会议上担任翻译。 2010年&#xff0c;张璐作为翻译出现&#xff0c;是五年来国家级媒体发布会首次起用女翻译。 2011年3月14日的媒体发布会。张璐再任会议翻译。 2012年的媒体发布会&#xff0c;张璐任翻译。 2013年&…

制定一份完美的测试计划,让您的产品质量更上一层楼!

大家好&#xff0c;我是彭于晏。今天学习测试计划如何书写。 虽然很多人日常工作中都知道测试计划是什么&#xff0c;但是写好测试计划&#xff0c;其实并不容易。今天就来一起学习下测试计划如何书写。 什么是测试计划&#xff1f; 测试计划是一份为软件产品所准备的详细文档…
最新文章