tanrong 2019-10-22

1.1.2 SQL注入漏洞解决
需要采用PreparedStatement对象解决SQL注入漏洞。这个对象将SQL预先进行编译,使用?作为占位符。?所代表内容是SQL所固定。再次传入变量(包含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;
????????}