SQL注入漏洞的分析及解决(java)
1,SQL注入漏洞的演示
2,SQL注入漏洞产生的原因
3,SQL注入漏洞的解决方案(Java)
一,SQL注入漏洞演示
1),数据库中用户和密码 2),验证登陆和sql拼接 模拟登陆验证页面 内联代码片。
package jdbcTest.jdbc.demo4;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;
import jdbcTest.jdbc.util.jdbcUtil;
/*
*
* sql注入漏洞演示
*
*
* */
public class userDao {
private Connection conn = null;
private Statement statement = null;
private ResultSet rs = null;
/*
* sql注入漏洞
*
* */
//注册登陆
public boolean login(String username,String password) {
boolean flag = false;
try {
jdbcUtil.loadDriver();
conn = jdbcUtil.getConnection();
statement = conn.createStatement();
String sql = "select * from user where username = "+username+" and password = "+password+"";
rs = statement.executeQuery(sql);
//判断数据库是否存在
if(rs.next()) {
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//释放资源
jdbcUtil.release(conn, statement, rs);
}
return flag;
}
}
模拟用户登陆页面 内联代码片。
package jdbcTest.jdbc.demo4;
import org.junit.Test;
/*
* sql 注入登陆演示
*
* */
public class demo4 {
@Test
public void demotest() {
userDao us = new userDao();
boolean boll = us.login("aaa+or1=1", "111");
if(boll) {
System.out.println("登陆成功!");
}else {
System.out.println("登陆失败!");
}
}
}
3),登陆结果展示
二,SQL注入漏洞原因分析
造成sql注入漏洞:因为用户名或者密码中有SQL语句中 的关键字,在和SQL执行语句拼接后出现漏洞(错误密码可登陆的情况)
三,SQL注入漏洞解决
采用PreparedStatement对象解决SQL注入漏洞。这个对象将SQL预先进行编译,使用?作为占位符。?所代表内容是SQL所固定。再次传入变量(包含SQL的关键字)。这个时候也不会识别这些关键字。
下面展示一些 内联代码片。
// PreparedStatement 预处理来解决SQL注入漏洞的问题;
public class UserDao {
public boolean login(String username,String password){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 定义一个变量:
boolean flag = false;
try{
// 获得连接:
conn = JDBCUtils.getConnection();
// 编写SQL语句:
String sql = "select * from user where username = ? and password = ?";
// 预编译SQL
pstmt = conn.prepareStatement(sql);
// 设置参数:
pstmt.setString(1, username);
pstmt.setString(2, password);
// 执行SQL语句:
rs = pstmt.executeQuery();
if(rs.next()){
// 说明根据用户名和密码可以查询到这条记录
flag = true;
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs, pstmt, conn);
}
return flag;
}
###小编:啊薇的憨宝
下一篇:
重装系统后无法启动连接 mysql
