为什么说尽量使用preparedStatement 代替 statement

使用statement可能存在sql 注入的风险,下面是测试sql injection 的demo

为什么说尽量使用preparedStatement 代替 statement

假设登录的sql是通过字符串拼接出来的,那么我只要在用户名框里填上" 'xjbt' or 1=1 -- " 就可以无视判断直接进入系统,因为or 1=1恒成立,"--"将1=1后的语句全部注释,所以肯定能查出数据,当然,现在的网站都会做基本的防sql注入处理,不过出于安全性考虑,带参数的sql都应该用preparedstatement来代替statement。

为什么说尽量使用preparedStatement 代替 statement

这里用preparedstatement来代替statement

为什么说尽量使用preparedStatement 代替 statement

这里可以看到,什么都没有查出来。也就是or 1=1 --这个万能钥匙在这里失灵了,preparedstatement步入了电子锁的时代(误!),PreparedStatement防SQL注入的原理就是解析参数的每个字符,遇到特殊字符('或“就转义),并在参数的最前边和最后变分别添加一个单引号

为什么说尽量使用preparedStatement 代替 statement