SQL注入

本文详细介绍了SQL注入的概念,通过一个具体的Java DAO实现展示了如何因未对用户输入进行有效验证而导致SQL注入问题。在测试类中,利用'or1='1'的注入字符串,成功绕过登录验证,强调了安全防护的重要性。
摘要由CSDN通过智能技术生成

一、概念

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

二、通过 Statement 来表现SQL注入

实体类:

public class User {
	private int id;
	private String username;
	private String password;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
}

dao接口和实现类:

public interface UserDao {
	/**
	 * 登录功能
	 * @param u  用户对象
	 */
	public void login(User u);
}
public class UserDaoImpl implements UserDao {
	public void login(User u){
		try {
			Connection conn = DBUtil.getConnection();
			Statement stmt = conn.createStatement();
			String sql = "select * from t_user where `username` = '"+u.getUsername()+"' && `password` = '"+u.getPassword()+"'";
			System.out.println(sql);
			ResultSet rs = stmt.executeQuery(sql);
			if(rs.next()){
				System.out.println("登录成功");
			}else{
				System.out.println("登录失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

测试类:

之所以能够注入成功,就是对SQL语句额外拼接,比如在原语句后加入 or 1 = 1,直接当场去世!

public class Test {
	public static void main(String[] args) {
		/**
		 *  使用 123' or 1='1 作为密码,注入成功
		 *  
		 *  select * from t_user where `username` = 'admin' && `password` = '' or 1='1'
		 */
		User u = new User("admin", "123' or 1='1");
		UserDaoImpl impl = new UserDaoImpl();
		impl.login(u);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值