JAVA使用预编译防止SQL注入
这是一条正常的SQL语句:
SELECT * FROM users WHERE name ='$var';
但是当变量var为 ' or true or '时,整条语句就变成:
SELECT * FROM users WHERE name ='' or true or '';
很明显,这条语句WHERE后面跟的条件无论如何都为真,所以会有SQL注入现象的产生,咋JAVA中可以使用PrepareStatment解决:
PreparedStatement preparedStatement=connection.prepareStatement("SELECT * FROM users WHERE name =?;");
然后,可以通过setXXX的方式来预编译参数:
preparedStatement.setString(x,name);
其中x为参数下标,从1开始,若无法明确参数类型,可以使用setObject()方法,PrepareStatment会自动进行判断处理。
preparedStatement.setObject(x,name);