JDBC登录案例开发-预编译语句防止注入攻击

JDBC登录案例开发-预编译语句防止注入攻击

最近在学jdbc连接数据库,但不明白为什么要预编译,多此一举呢?而后自己查了一些资料,欢迎交流指正呀。

1.什么是注入攻击

当我们在使用jdbc连接数据库完成登录验证工作时,从键盘录入账号和密码 ,
有时利用一定规则输入密码,无论该数据在数据库中匹配与否都能成功登录。
下面举例:

String account="51188688"; //输入账号
String password=" 123' or '4'='4 "; //输入密码
String sql="select * from admin where account='"+account+"' 
			and password='"+password+"' "; 

加载驱动,获得连接,返回结果集,我们输出解析的sql语句

System.out.println(sql);

结果:
在这里插入图片描述
显然,密码在解析为sql语句时,or ‘4’='4’不再为密码内容,促使条件始终为true,此时所有数据均会加载到结果集中,登陆成功!
结果:
在这里插入图片描述
接下来是解决方法。

2.预编译语句设置参数

直接上代码:

String account="51188688"; //输入账号
String password=" 123' or '4'='4 "; //输入密码
String sql="select * from admin where account=? and password=? "; 
//预编译sql语句
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1,account); //sql语句中的第1个?为 account (“51188688”)
statement.setString(2,password);//sql语句中的第2个?为 password

这样直接将账号与密码作为参数传输进去,便避免了注入问题。

扩展:类似因sql语句导致踩坑的还有很多。例如当在某系统中输入若干条件,如果where中用内连接查询某员工信息时,若员工信息存在,但因输入薪资多打了0超过约束条件时,便会显示无此员工信息,此时用外连接就可以解决这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值