SQL注入原理
一般用户登录用的SQL语句为:SELECT * FROM user WHERE username=‘admin’ AND password=‘passwd’,此处admin和passwd分别为用户输入的用户名和密码,如果程序员没有对用户输入的用户名和密码做处理,就可以构造万能密码成功绕过登录验证,如用户输入’or 1#,SQL语句将变为:SELECT * FROM user WHERE username=’‘or 1#’ AND password=’’,‘’or 1为TRUE,#注释掉后面的内容,所以查询语句可以正确执行。将会查出所有的用户名,导致内存泄漏。
解决方法:用PreparedStatement对象替换前面的Statement对象。PreparedStatement对象可以预先处理给定的SQL语句,在sql语句里面使用?占位符来替代后续要传递进来的变量。后面进来的变量值,将会被看成是字符串,不会产生任何的关键字。
例子:
1代表第一个?被替代的值,2代表第二个问号被替代的值。