SQL注入
- SQL注入是指web应用没有检查用户输入数据的合法性,进而无法阻止用户的非法输入,用户通过输入在SQL查询语句中添加额外SQL语句,达到自己查询更多数据的目的。
使用PreparedStatement防止SQL注入
- 在SQL语句中使用占位符?来代替用户输入的值,然后再按顺序为占位符赋值
- PreparedStatement会把所有用来替换占位符的都当成字符串处理
package com.jing.jdbc;
import com.jing.utils.JDBCUtils;
import java.sql.*;
// 使用PreparedStatement解决SQL注入问题
public class JDBCDemo03 {
public static void main(String[] args) {
// login("zhangsan", "123");
login("' ' or 1=1", "123456");
}
public static void login(String username, String password){
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
// 利用工具类获取数据库连接
connection = JDBCUtils.getConnection();
// 编写查询语句,值使用占位符?代替,PreparedStatement会将所有传过来的值当成字符串处理
String sql = "SELECT * FROM sys_user where username = ? and password = ?";
// 获取SQL语句执行对象
statement = connection.prepareStatement(sql);
// 设置用户名和密码
statement.setString(1, username);
statement.setString(2, password);
resultSet = statement.executeQuery();
if(resultSet.next()){
System.out.println("username=" + resultSet.getObject("username") + " ");
System.out.println("password=" + resultSet.getObject("password") + " ");
}else {
System.out.println("用户名或密码错误,登录失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(connection,statement,resultSet);
}
}
}