JDBC-Sql防注入

JDBC链接数据库查询相关信息时,传入参数进行查询等操作,可以拼接字符串,例如:

String querySQL = "select * from Student where studentId = '13010001'";
ConnectionUtils connection = ConnectionUtils.getConnection();
Statement stmt = connection.prepareStatement(querySQL);
ResultSet rs = stmt.executeQuery();
(ConnectionUtils工具类详情见 【工具类】一、ConnectionUtil工具类)

其中,sutdentId属性在传入的过成功,可引起SQL注入,如:将'13010001'替换成'13010001' or 'a' = 'a' 。由于'a' = 'a' 恒成立,则sql语句一定可以执行


所以,为防止SQL注入,可以利用PreparedStatement来防止SQL注入。用法如下:

String querySQL = "select * from Student where studentId = ?";
ConnectionUtils connection = ConnectionUtils.getConnection();
PreparedStatement stmt = connection.prepareStatement(querySQL);
stmt.setString(1,str);
ResultSet rs = stmt.executeQuery();

PreparedStatement的处理方式是,将str的内容作为一个字符串赋给querySQl语句中的?。所以,如果被传参数为'13010001' or 'a' = 'a',那做为该字段的对应值,显然这样是没有任何查询结果的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值