• 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);

  • 相关阅读:
    jbox使用总结
    NOI 2012 【迷失游乐园】
    SCOI 2008 【奖励关】
    trie树——【吴传之火烧连营】
    状压DP——【蜀传之单刀赴会】
    NOIP提高组2016 D2T3 【愤怒的小鸟】
    NOIP提高组2013 D2T3 【华容道】
    [学习笔记] [KMP]字符串匹配算法
    SHOI 2014 【概率充电器】
    HNOI 2015 【亚瑟王】
  • 原文地址:https://www.cnblogs.com/shan13936/p/13904886.html
Copyright © 2020-2023  润新知