sql注入问题及解决方案

Sql注入:由于JDBC程序在执行的过程中sql语句在拼装时使用了页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻击方式就叫做sql注入;

如:某网站登录用户名为 张三  密码为  123

后台数据库验证用户时有sql语句  select * from user  where username = ' 张三'  and   password = '123';

若其他人知道你的用户名是张三   则 可以输入  用户名为  张三’#  密码为空   

则在后台执行sql语句时sql语句变为select * from user where username = ‘张三‘#’ and password = ’‘;

由于在sql语句中#会将后边的sql语句注释掉,结果登录成功。用户受到攻击

Sql注入解决方案

将JDBC代码中的Statement 换成 PreparedStatement

PreparedStatement是Statement的孩子,不同的是:

PreparedStatement使用预编译机制,在创建PreparedStatement对象时就需要将sql语句传入,传入的过程 中参数要用?替代,这个过程会导致传入的sql被进行预编译,然后再调用PreparedStatement的setXX 将参数设置上去,由于Sql语句已经经过了预编译,再传入特殊值也不会起作用了。

PreparedStatement使用了预编译机制,sql语句在执行的过程中效率比Statement要高。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值