前言:
堕落了三个月,现在因为被找实习而困扰,着实自己能力不足,从今天开始 每天沉淀一点点 ,准备秋招 加油
注意:
本文章参考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
修复:
预编译处理
哈哈 ,先写到这里 ,剩下的明天在更新 加油啊