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 保留字

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

例如 单引号 双引号

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值