SQL注入问题
sql注入问题
sql存在漏洞,会被攻击导致数据泄露 SQL会被拼接 or
package com.xy.MySQL;
import com.xy.MySQL.myMethods.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @ClassName: SQLQuestion
* @Description: TODO 类描述
* @Version: 1.0
*/
public class SQL注入漏洞测试 {
public static void main(String[] args) {
//正常登录
// login("张三","1234567");
//sql注入
login("' or '1=1","' or '1=1"); //这里用这种方法获取到了不应该获取到的信息
}
/**
* 登录业务
*/
public static void login(String userName, String password) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
try {
con = JDBCUtils.getConnection();
st = con.createStatement();
String sql = "SELECT * FROM users WHERE `name`='"+userName+"' AND `password`='"+password+"'";
// SELECT * FROM users WHERE `name`='' or '1=1' AND `password`='123456'
System.out.println(sql);
rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println("id="+rs.getInt("id"));
System.out.println("name="+rs.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(con, st, rs);
}
}
}
导致结果:错误的用户名或者密码可以获取到全部的用户信息
如何防止SQL注入呢?用PreparedStatement对象