以下以自定义简单页面为例进行测试
例子:当用户进行登陆时,后台servlet会将前台传来的用户名跟密码与数据库的数据进行对比,如果后台sql语句是通过拼接得到的话,就会出现sql注入的情况
部分原因:在对数据库操作的sql语句中,通过-- 和# 会将其后的语句进行注解,即不生效,注意符号后面都带一个空格
数据库测试如下:
正常测试
测试1
测试2
以上的语句均能select出正常的数据,所以这就是问题所在
在没有验证用户输入信息、后台SQL语句通过拼接得到 等的情况下,会在后台出现sql注入
测试如下:
后台sql语句:
String sql=“select * from user where username=’”+username+"’ and password=’" + password + “’”;
账号密码正常输入-登陆成功
只输入: root’ – 或root’ # 也能正常登陆进去,因为通过注入username和password后得到的sql语句等价于 select * from user where username=‘root’ 因为-- 或# 的存在后面的语句均被注解掉
最简单的解决方法:
1.不要相信用户输入的任何信息,校验用户输入的信息后再对数据库进行操作
2.使用PreparedStatement对象进行预编译sql语句
3.等