07_传智播客JDBC_Statement的sql注入问题

通过PreperedStatement预防主注入

PreperedStatement的优点

1 预防sql注入 占位符作为实参来定义sql语句,从而避免sql注入的攻击。

2 Statement 频繁使数据库编译SQL ,造成数据库缓存区溢出

3 在相关数据库连接没有关闭的情况下, 数据库和驱动可以优化PreperedStatement

 

package five.base;

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

import four.utils.utilsSingle;

public class Base {
 
 public static void main(String[] args) throws SQLException {

// 注入
  read("'or 1 or '");
 }

    static void read(String name) throws SQLException{
       
     Statement statement = null;
     ResultSet rs = null;
     utilsSingle instance = utilsSingle.getUtilsSingleInstance();

     // 1 创建连接
        Connection connection = instance.getConnection();
        try {
         
            // 2 创建语句
            statement = connection.createStatement();
            // 4 执行语句
            String sql = "select *from user where name = '" + name + "'";
            System.out.println(sql);
            rs = statement.executeQuery(sql);
            // 5 处理结果
            while (rs.next()) {
                System.out.println(rs.getObject(1)
                        + "/t" + rs.getObject(2)
                        + "/t" + rs.getObject(3)
                        + "/t" + rs.getObject(4)
                        + "/t");
            }
        } finally {
         // 释放资源 finally
         instance.free(connection, statement, rs);
        }
    }
}

 

解决思路 过滤 sql 保留字

但是 不同的数据库 的某些保留字 是不一样的

例如 单引号 双引号

所以 应该交给数据库生产厂商(驱动)来过滤保留字

 

发布了48 篇原创文章 · 获赞 3 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章