• SQL注入问题------JDBC编写简单登录代码


    一、什么是sql注入

    sql注入:用户输入的内容, 有一些sql的特殊关键字参与字符串的拼接,完成了一条逻辑发生变化的新的SQL语句 !

    用代码举个例子简单说明一下:
    package cn.zhbit.jdbc;

    import cn.zhbit.util.JDBCUtils;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Scanner;

    public class jdbc_login_test {

    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入用户名:");
    String username = sc.next();
    System.out.println("请输入密码:");
    String password = sc.next();
    boolean flag = new jdbc_login_test().login(username,password);
    if (flag){
    System.out.println("登陆成功!");
    }else {
    System.out.println("用户名或密码错误!");
    }
    }

    public boolean login(String username, String password){
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    if (username == null || password == null){
    return false;
    }
    try {
    conn = JDBCUtils.getConnection(); //获取数据库链接对象
    String sql = "select * from user where username = '" + username + "'and password = '" + password +"'" ;
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    return rs.next();

    } catch (SQLException e) {
    e.printStackTrace();
    }finally {
    JDBCUtils.close(rs,stmt,conn); //释放资源
    }
    return false;
    }
    }

    上边代码原理是:

      1:用户输入用户名和密码

      2:在数据库中查找匹配的用户名和密码,若有匹配的则登录成功,否则,提示"用户名或密码错误!"。实际就是在数据库中执行以下sql语句

      String sql = "select * from user where username = '" + username + "'and password = '" + password +"'" ;

    上边代码的逻辑看似没有问题,实则问题很大:
      当用户这样输入:输入数据库中不存在的用户名,例如khkj,然后输入密码:a' or 'a' = 'a,这样输入也能登陆成功
    原因:
      当用户输入以上用户名和密码时,程序就会在数据库中执行以下sql语句
    sql : select * from user where username = 'khkj' and password = 'a' or 'a' = 'a' ;只是一条恒等式,数据库会返回user表中所有的内容,这样rs.next()就会等于true,所以可以登陆成功。





  • 相关阅读:
    Web API总结
    @Html.Raw() 方法输出带有html标签的字符串
    jQuery
    图与树基础-完全图的判定
    图和树基础-蒜头君旅行
    PAT乙级1008
    PAT乙级1007
    PAT乙级1005
    PAT乙级1001
    前端工程化-webpack简介(一)
  • 原文地址:https://www.cnblogs.com/bear7/p/12447806.html
Copyright © 2020-2023  润新知