JDBC:使用Statement操作数据库时产生的SQL注入问题原因分析

本文探讨了JDBC中使用Statement进行数据库操作时如何引发SQL注入问题,通过示例展示了注入过程。同时,文章指出使用PreparedStatement可以有效避免此类问题,因为其预编译特性和参数绑定能防止字符串拼接导致的安全风险。作者提供了建表和测试代码,以帮助理解两种方法的差异。
摘要由CSDN通过智能技术生成

SQL注入问题简单介绍
1.JDBC中使用Stement对数据库增删改查,
执行sql语句时使用拼接字符串会导致SQL注入
2.JDBC中使用PreaparedStement可以有效避免SQL注入问题

**
原因分析: 任意值’第一个引号与拼接字符串name匹配后,1=1恒成立,–将后面的密码pwd已经注释掉了,所以输入任意值都可以成功登录**

Statement:
例如输入:用户名: 任意值’ or 1=1 –
密码:任意值
原sql语句:select * from login where l_name=’"+name+"’ and l_pwd=’"+pwd+"’;
sql注入后:select * from login where l_name=’"+任意值’ or 1=1 --(1=1恒成立,后面的sql语句已经被注释)
+"’ and l_pwd=’"+任意值+"’;

PStatement:
因为其sql语句可以用占位符?且用setXXX()为其赋值,可以避免字符串拼接,以此来防止sql注入

应用实例:创建一个login数据表且设置好其用户名与密码,然后使用jdbc连接该数据库,其中登录数据库的账号和密码在java控制台中由键盘输入。

建表语句(本人使用的数据库是mysql数据库)

create datebase basketball;
use basketball;
create table login(
	l_id int not null primary key,
	l_name varchar(10) not null,
	l_pwd varchar(5) not null
)
insert into login values(1,"zs","abc");
select * from login;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值