zoukankan      html  css  js  c++  java
  • sql注入问题 阿善没用 看过


    案例: 演示通过PreparedStatement接口的预编译功能 解决 SQL注入攻击问题.

    SQL注入攻击问题的产生原因:
    因为用户录入的非法字符, 符号, 单词等, 被我们的SQL语句识别为关键字了, 从而修改了我们SQL语句的格式, 从而造成了安全隐患.
    SQL注入攻击问题的解决思路:
    采用 预编译思路 解决, 即: 预先对SQL语句进行一次编译, 把需要用户填充的地方用 占位符标记上, 之后不管用户传入什么内容,
    都只是采用 普通的字符来处理, 并不会被识别为关键词, 这样就避免了 SQL注入攻击问题.

    PreparedStatement解释:
    概述:
    它是一个接口, 也是 Statement接口的子接口, 它具有 预编译功能.
    成员方法:
    public void setXxx(int index, Xxx value); 给指定的占位符填充值. Xxx表示数据类型.
    */
    public class Demo02 {
    public static void main(String[] args) throws Exception {
    //1. 提示用户录入他/她的账号和密码, 并接收.
    Scanner sc = new Scanner(System.in);
    System.out.println("请录入您的账号: ");
    String username = sc.nextLine();
    System.out.println("请录入您的密码: ");
    String password = sc.nextLine();

    //2. 获取连接对象.
    Connection conn = JDBCUtils.getConnection();

    //3. 获取可以执行SQL语句的对象, PreparedStatement(具有预编译功能)
    String sql = "select * from users where username=? and password=?;"; // ? 表示占位符
    PreparedStatement ps = conn.prepareStatement(sql);

    //具体执行SQL语句之前, 需要给占位符 填充值.
    ps.setString(1, username);
    ps.setString(2, password);

    //4. 执行SQL语句, 获取结果集.
    ResultSet rs = ps.executeQuery();
    //5. 判断结果集是否为空.
    //不为空, 说明查询到数据了, 则表示: 登陆成功.
    //否则, 登陆失败.
    System.out.println(rs.next() ? "登陆成功, 欢迎您 " + username : "登陆失败, 用户名或者密码错误!");

    //6. 释放资源.
    JDBCUtils.release(conn, ps, rs);

  • 相关阅读:
    OCP-1Z0-052-V9.02-177题
    游戏服务端IOCP模型,自己封装的一个类,3行代码搞定服务端。
    OCP-1Z0-052-V9.02-116题
    OCP-1Z0-052-V9.02-72题
    map按value值查找——find_if的使用
    Oracle OCP 11G 052答案解析目录
    Oracle OCP 11G 052 V8.02与V9.02版本对比
    OCP-1Z0-052-V8.02-102题
    OCP-1Z0-052-V8.02-117题
    在完成端口IOCP模型判断客户端是否已关闭连接(掉线)
  • 原文地址:https://www.cnblogs.com/shan13936/p/13904886.html
Copyright © 2011-2022 走看看