什么是SQL注入

所谓 SQL 注入,就是通过把含有 SQL 语句片段的参数插入到需要执行的 SQL 语句中,
最终达到欺骗数据库服务器执行恶意操作的 SQL 命令。

  1. import java.sql.Connection;
  2. import java.sql.ResultSet;
  3. import java.sql.Statement;
  4. /**
  5. * sql注入演示
  6. */
  7. public class SqlInjectTest {
  8. public void sqlInject(String username,int userage){
  9. Connection connection = null;
  10. Statement statement = null;
  11. ResultSet resultSet = null;
  12. try {
  13. connection = JDBCUtils.getConnection();
  14. statement = connection.createStatement();
  15. String sql = "select * from users where username='"+username+"' and userage="+userage;
  16. System.out.println(sql);
  17. resultSet = statement.executeQuery(sql);
  18. //处理结果集
  19. while(resultSet.next()){
  20. int userid = resultSet.getInt("userid");
  21. String name = resultSet.getString("username");
  22. int age = resultSet.getInt("userage");
  23. System.out.println(userid+" "+name+" "+age);
  24. }
  25. }catch (Exception e){
  26. e.printStackTrace();
  27. }finally {
  28. JDBCUtils.clossResource(resultSet,statement,connection);
  29. }
  30. }
  31. public static void main(String[] args) {
  32. SqlInjectTest sqlInjectTest = new SqlInjectTest();
  33. sqlInjectTest.sqlInject("changfeng' or 1=1 -- ",29);
  34. }
  35. }

image.png

  1. public void noSqlInject(String username,int userage){
  2. Connection connection = null;
  3. PreparedStatement preparedStatement = null;
  4. ResultSet resultSet = null;
  5. try{
  6. connection = JDBCUtils.getConnection();
  7. preparedStatement = connection.prepareStatement("select * from users where username=? and userage=?");
  8. preparedStatement.setString(1,username);
  9. preparedStatement.setInt(2,userage);
  10. resultSet = preparedStatement.executeQuery();
  11. while(resultSet.next()) {
  12. int userid = resultSet.getInt("userid");
  13. String name = resultSet.getString("username");
  14. int age = resultSet.getInt("userage");
  15. System.out.println(userid+" "+username+" "+userage);
  16. }
  17. }catch (Exception e){
  18. e.printStackTrace();
  19. }finally {
  20. JDBCUtils.clossResource(resultSet,preparedStatement,connection);
  21. }
  22. }

image.png