preparedstatement为什么比statement安全
关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
恶义 SQL 语法
String sql = “select * from tb_name where name= ‘”+varname+”’ and passwd=’”+varpasswd+”’”;
如果我们把 [’ or ‘1’ = ‘1] 作为 varpasswd 传入进来 . 用户名随意 , 看看会成为什么 ?
select * from tb_name = ’ 随意 ’ and passwd = ” or ‘1’ = ‘1’;
因为 ‘1’=’1’ 肯定成立 , 所以可以任何通过验证 . 更有甚者 :
把 [‘;drop table tb_name;] 作为 varpasswd 传入进来 , 则 :
select * from tb_name = ’ 随意 ’ and passwd = ”;drop table tb_name; 有些数据库是不会让你成功的 , 但也有很多数据库就可以使这些语句得到执行 .
而如果你使用预编译语句 . 你传入的任何内容就不会和原来的语句发生任何匹配的关系 。
只要全使用预编译语句 , 你就用不着对传入的数据做任何过虑 。
而如果使用普通的 statement, 有可能要对 drop,; 等做费尽心机的判断和过虑 ———————————————— 版权声明:本文为CSDN博主「风吟_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_29924227/article/details/81046800
赞0
踩0