SQL注入就是将原本的SQL语句的逻辑结构改变,使得SQL语句的执行结果和原本开发者的意图不一样;使用Statement语句执行者,执行sql,会造成sql注入的问题,String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我们把[' or '1' = '1]作为varpasswd传入进来,执行查询的时候 sql会变成,String sql = "select * from tb_name where name= '' and passwd = '' or '1' = '1',1=1是永远成立的,所以,前面的条件已经不起作用,我们使用预编译语句执行者就可以避免这个问题,prepareStatement将sql预编译,传参数的时候,不会改变sql语句结构,就可以避免注入。
如果我们把[' or '1' = '1]作为varpasswd传入进来,执行查询的时候 sql会变成,String sql = "select * from tb_name where name= '' and passwd = '' or '1' = '1',1=1是永远成立的,所以,前面的条件已经不起作用,我们使用预编译语句执行者就可以避免这个问题,prepareStatement将sql预编译,传参数的时候,不会改变sql语句结构,就可以避免注入。