1. package JDBC;
    2. import java.sql.Connection;
    3. import java.sql.DriverManager;
    4. import java.sql.ResultSet;
    5. import java.sql.Statement;
    6. public class login {
    7. public String login(String aname,String apass){
    8. String result = "用户名或密码错误";
    9. String classname = "com.mysql.jdbc.Driver";
    10. String url = "";
    11. String username = "";
    12. String password = "";
    13. try {
    14. Class.forName(classname);
    15. Connection conn = DriverManager.getConnection(url, username, password);
    16. Statement stat = conn.createStatement();
    17. String sql = "select * from atm where aname='"+aname+"'and apass='"+apass+"'";
    18. ResultSet rs = stat.executeQuery(sql);
    19. if (rs.next()){
    20. result = "登陆成功";
    21. }
    22. System.out.println("执行成功");
    23. stat.close();
    24. conn.close();
    25. } catch (Exception e) {
    26. e.printStackTrace();
    27. }
    28. return result;
    29. }
    30. }
    1. package JDBC;
    2. import java.util.Scanner;
    3. public class Testlogin {
    4. public static void main(String[] args) {
    5. Scanner input = new Scanner(System.in);
    6. System.out.println("请输入账号:");
    7. String aname = input.nextLine();
    8. System.out.println("请输入密码:");
    9. String apass = input.nextLine();
    10. login lg = new login();
    11. String rs = lg.login(aname, apass);
    12. if (rs.equals("登陆成功")){
    13. System.out.println("欢迎登陆银行系统");
    14. }else{
    15. System.out.println(rs);
    16. }
    17. }
    18. }

    image.png
    image.png
    在控制台执行命令可以发现使用xxx’ or ‘1’ = ‘1 也可以成功的登陆———>SQL注入
    什么是SQL注入
    通过SQL命令,拼接其他的字符串,让其他的字符串来改变原有SQL语句的执行,最终达到欺骗服务器的效果,里面拼接的字符符合SQL语法(被SQL语法认可)
    解决办法
    1.利用PreparedStatement

    1. package JDBC;
    2. import java.sql.*;
    3. public class login {
    4. public String login(String aname,String apass){
    5. String result = "用户名或密码错误";
    6. String classname = "com.mysql.jdbc.Driver";
    7. String url = "jdbc:mysql://bj-cdb-547s28hs.sql.tencentcdb.com:60439/test?useSSL=true";
    8. String username = "root";
    9. String password = "qq2653650997";
    10. String sql = "select * from atm where aname=? and apass = ?";
    11. try {
    12. Class.forName(classname);
    13. Connection conn = DriverManager.getConnection(url, username, password);
    14. PreparedStatement pstat = conn.prepareStatement(sql);
    15. // 给问号赋值
    16. pstat.setString(1,aname);
    17. pstat.setString(2,apass);
    18. ResultSet rs = pstat.executeQuery();
    19. if (rs.next()){
    20. return "登陆成功";
    21. }
    22. System.out.println("执行成功");
    23. pstat.close();
    24. conn.close();
    25. } catch (Exception e) {
    26. e.printStackTrace();
    27. }
    28. return result;
    29. }
    30. }