zoukankan      html  css  js  c++  java
  • PreparedStatement可以有效地防止sql被注入

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import org.junit.Test;
    
    import util.JdbcUtil;
    
    /**
     * 模拟用户登录效果
     * @author APPle
     *
     */
    public class Demo2 {
        //模拟用户输入
        //private String name = "ericdfdfdfddfd' OR 1=1 -- ";
        private String name = "eric";
        //private String password = "123456dfdfddfdf";
        private String password = "123456";
    
        /**
         * Statment存在sql被注入的风险
         */
        @Test
        public void testByStatement(){
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            try {
                //获取连接
                conn = JdbcUtil.getConnection();
                
                //创建Statment
                stmt = conn.createStatement();
                
                //准备sql
                String sql = "SELECT * FROM users WHERE NAME='"+name+"' AND PASSWORD='"+password+"'";
                
                //执行sql
                rs = stmt.executeQuery(sql);
                
                if(rs.next()){
                    //登录成功
                    System.out.println("登录成功");
                }else{
                    System.out.println("登录失败");
                }
                
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                JdbcUtil.close(conn, stmt ,rs);
            }
            
        }
        
        /**
         * PreparedStatement可以有效地防止sql被注入
         */
        @Test
        public void testByPreparedStatement(){
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;
            try {
                //获取连接
                conn = JdbcUtil.getConnection();
                
                String sql = "SELECT * FROM users WHERE NAME=? AND PASSWORD=?";
                
                //预编译
                stmt = conn.prepareStatement(sql);
                
                //设置参数
                stmt.setString(1, name);
                stmt.setString(2, password);
                
                //执行sql
                rs = stmt.executeQuery();
                
                if(rs.next()){
                    //登录成功
                    System.out.println("登录成功");
                }else{
                    System.out.println("登录失败");
                }
                
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } finally {
                JdbcUtil.close(conn, stmt ,rs);
            }
            
        }
    }
  • 相关阅读:
    银行数仓主题划份
    Halcon 图像的算术运算(crop_part,invert_image,scale_image)
    Halcon 图像截取 crop_part
    Halcon 算子 threshold
    Halcon 图片读取以及图像转换
    Lens shading correction 的四种方法
    Micro-Manage/ImageJ软件使用技巧快问快答
    Micro-Manager基本操作指南(下)
    Micro-Manager基本操作指南(上)
    MATLAB 配置 Micro-Manager
  • 原文地址:https://www.cnblogs.com/linst/p/5868449.html
Copyright © 2011-2022 走看看