当前位置:Gxlcms > 数据库问题 > SQL注入问题的解决方案

SQL注入问题的解决方案

时间:2021-07-01 10:21:17 帮助过:3人阅读

sql = "select * from user where username=‘"+username+"‘ and password=‘"+password+"‘";
  • String sql = "select * from user where username=‘tom‘ and password=‘123‘";
  • select * from user where username=‘jerry‘ and password=‘abc‘//这种情况是不会有问题的
  • //测试如果传入的是SQL语句的的一部分
  • username:tom‘ or ‘1‘=‘1
  • password:????????
  • //这时候的SQL语句为一下这种情况
  • select * from user where username=‘tom‘ or ‘1‘=‘1‘ and password=‘?????‘
  • //由于and的执行优先级大于Or 可以看作以下情况
  • select * from user where username=‘tom‘ or (‘1‘=‘1‘ and password=‘?????‘);
  • //由于是or 或者的关系这时的SQL语句可以看作是这样的语句
  • select * from user where username=‘tom‘

  • 二、解决方案(引入:PreparedStatement对象,使SQL语句进行预编译PreparedStatement pstmt = conn.perpareStatement(String sql);其实statement执行executeQuery内部分为两步:第一步:编译sql 第二步:执行sql优点:能预编译sql语句
    例子:数据库客户端服务端基本模型登陆端
    1. package com.heima.login.client;
    2. import java.util.Scanner;
    3. import com.heima.login.bean.User;
    4. import com.heima.login.seriver.services;
    5. public class login {
    6. /**
    7. * @param args
    8. * @throws Exception
    9. */
    10. public static void main(String[] args) throws Exception {
    11. // TODO Auto-generated method stub
    12. // 创建Scanner接收输入内容
    13. Scanner sc= new Scanner(System.in);
    14. System.out.println("请输入用户名");
    15. String username = sc.nextLine();
    16. System.out.println("请输入密码");
    17. String password = sc.nextLine();
    18. // 创建服务端对象使用登陆方法
    19. services s=new services();
    20. User user = s.login(username, password);
    21. if(user!=null){
    22. System.out.println(user);
    23. }else{
    24. System.out.println("用户名或密码错误!!!");
    25. }
    26. }
    27. }
    服务端:
    1. package com.heima.login.seriver;
    2. import java.sql.Connection;
    3. import java.sql.PreparedStatement;
    4. import java.sql.ResultSet;
    5. import com.heima.Tools.JdbcConnection;
    6. import com.heima.login.bean.User;
    7. public class services {
    8. public User login(String username,String password) throws Exception
    9. {
    10. //新建user引用,默认值问null
    11. User u=null;
    12. //使用自定义数据库连接工具类进行数据库连接
    13. Connection conn=JdbcConnection.getConnection();
    14. //创建预编译数据库连接语句
    15. String sql = "select * from user where username=? and password=?";
    16. //创建PreparedStatement对象对数据库语句进行预编译
    17. PreparedStatement stem=conn.prepareStatement(sql);
    18. //设置预编译语句中的查询值
    19. stem.setString(1, username);
    20. stem.setString(2, password);
    21. //执行SQL语句
    22. ResultSet rs=stem.executeQuery();
    23. //如果有记录对User对象进行赋值
    24. if(rs.next())
    25. {
    26. u = new User();
    27. u.setAge(rs.getInt("age"));
    28. u.setDept(rs.getString("Dept"));
    29. u.setEmail(rs.getString("email"));
    30. u.setGender(rs.getString("gender"));
    31. u.setId(rs.getInt("id"));
    32. u.setPassword(rs.getString("password"));
    33. u.setRegistTime(rs.getDate("registTime"));
    34. u.setSalary(rs.getDouble("salary"));
    35. u.setUsername(rs.getString("username"));
    36. }
    37. //关闭数据库资源
    38. JdbcConnection.close(conn, stem, rs);
    39. return u;
    40. }
    41. }

    User对象:
    1. package com.itheima.login.entity;
    2. public class User {
    3. private int id;
    4. private String username;
    5. private String password;
    6. private String email;
    7. public int getId() {
    8. return id;
    9. }
    10. public void setId(int id) {
    11. this.id = id;
    12. }
    13. public String getUsername() {
    14. return username;
    15. }
    16. public void setUsername(String username) {
    17. this.username = username;
    18. }
    19. public String getPassword() {
    20. return password;
    21. }
    22. public void setPassword(String password) {
    23. this.password = password;
    24. }
    25. public String getEmail() {
    26. return email;
    27. }
    28. public void setEmail(String email) {
    29. this.email = email;
    30. }
    31. @Override
    32. public String toString() {
    33. return "User [id=" + id + ", username=" + username + ", password="
    34. + password + ", email=" + email + "]";
    35. }
    36. }



    来自为知笔记(Wiz)

    SQL注入问题的解决方案

    标签:

    人气教程排行