-
问题出现的原因
在jdbc中用于编译sql对象的Statement类的使用如
String sql = "select * from jdbc where username = '"+username+"' and password = '"+password+"' "; //获取执行sql的对象 stmt = conn.createStatement(); //执行sql语句 stmt.executeQuery(sql);
假如传入的参数username为 ’or 1=1 ;-- ,或者参数password为a’ or ‘a’ = 'a。
分析:
--在sql中是注释符号,password参数被注释掉了,sql变成了只有一个条件,且是永远成立的;意味着此时无论录入什么数据,此sql都会有返回值;此时不仅sql起不到原先控制用户信息的作用,如果此程序用在了登录模块上,且对返回值只判断是否为空的情况下,我只要像上面这样录入username,password录入任何信息都可以登录系统。
-
解决办法
一般使用Prepared Statement来解决以及数据校验做得更加严密
//1.获取连接 conn = JDBCUtils.getConnection(); //2.定义sql String sql="select * from jdbc where username = ? and password = ?"; //3.创建preparedStatement对象(解决sql注入问题) pstmt = conn.prepareStatement(sql); //4.给占位符?赋值 pstmt.setString(1,username); //下标从1开始 pstmt.setString(2,password); //5.执行sql rs = pstmt.executeQuery();
jdbc中sql注入问题
最新推荐文章于 2024-04-16 16:45:06 发布