JDBC SQL注入漏洞

文章讨论了SQL注入攻击的一种示例,其中黑客通过拼接SQL参数来绕过验证。解决方案是采用PreparedStatement进行预编译,确保参数不会影响SQL结构,提高代码安全性。示例展示了如何使用PreparedStatement设置参数,避免直接字符串拼接。
摘要由CSDN通过智能技术生成

底层原理通过传递参数(or 1=1 )拼接的SQL语句 导致其成立可以查询到数据。
登录SQL语句:
select * from shs_users where name=‘1’ and pwd=‘12’;
但黑客传递的参数 ’ or 1=‘1
select * from shs_users where name=’’ and pwd=‘’ or 1=‘1’;

解决办法:
使用PreparedStatemnet(预编译执行者对象),将sql语句进行提前编译,明确SQL语句的格式后,传递的参数就是参数,不会拼接sql语句。
用?占位符赋值的方式 setxxx(参数1,参数2)
xxx: 数据类型
参数1:?的位置从编号1开始
参数2:?的实际参数

String loginSql = "select * from shs_users where name=? and pwd=?;";
statement = connection.prepareStatement(loginSql);
statement.setString(1, userEntity.getPhone());
statement.setString(2, userEntity.getPwd());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值