025_jdbc-mysql-Statement的sql注入问题

1. 新建一个JDBCStatementProblem工程, 使用我们之前的JDBCUtil.java和jdbc.properties属性文件, 以及UserDao

2. 修改UserDaoImpl.java

package com.lywgames.dao.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.lywgames.dao.UserDao;
import com.lywgames.util.JDBCUtil;

public class UserDaoImpl implements UserDao {
	public void login(String username, String password) {
		Connection conn = null; 
		Statement st = null;
		ResultSet rs = null;
		
		try {
			// 1.获取连接对象
			conn = JDBCUtil.getConn(); 
			// 2.创建statement, 跟数据库打交道, 一定需要这个对象
			st = conn.createStatement();
			// 3.执行查询sql, 获取ResultSet结果集
			String sql = "select * from user where username='"+ username  +"' and password='"+ password +"'";
			System.out.println(sql);
			rs = st.executeQuery(sql);
			// 4.使用ResultSet结果集遍历
			if(rs.next()){
				System.out.println("登录成功");
			}else{
				System.out.println("登录失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 5.释放资源
			JDBCUtil.release(conn, st, rs);
		}
	}
}

3. 输入任意用户名和密码, 在密码处拼接1=1, 运行程序, 居然登录成功了。

4. Statement执行, 其实是拼接sql语句的。 先拼接sql语句, 然后在一起执行。如果变量里面带有了数据库的关键字, 那么一并认为是关键字, 不认为是普通的字符串。 这里拼接 or 1=1, 永远为真, 返回登录成功。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值