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;