防止SQL注入方法总览(整理)

       字符串检测:但是限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点是,系统 中不可避免地会有些内容包含特殊字符,这时候总不能拒绝入库,也就是说如果硬要使用字符串检测的方案来做,存在误杀。

       字符串替换:把危险字符替换成其他字符,但是危险字符可能比较多,一一枚举会比较麻烦,而且不同编码也要考虑进去,所以可能存在漏网之鱼。

       存储过程:把参数传到存储过程进行处理,但是有些数据库不支持存储过程。而且如果存储过程中执行的命令也是通 过拼接字符串出来的,还是会有漏洞。

      参数化查询:访问数据库时,在需要填入数值或数据的地方,使用参数 来给值。

      比如 mysql  SQL代码

  set  @n = XXX;
  select  from table where  id=@n;
     此时@n是sql语句的一部分。

    具体各个语言,各个数据库的参数化查询是怎么样,依据实际。

   php下 使用mysqli

 
$db=new mysqli($host,$user,$pass,$database);
$stmt=$mysqli->prepare("select * from Table where parameter=? ") ;
$stmt->bindparam(XX,XX);
$stmt->execute();

bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )    

types 有一个或者多个特定字符组成,每个字符的意思如下表

规格表
字符描述
i integer 类型
ddouble类型
sstring 类型
bblob类型


java 下,使用jdbc包

Connection conn = DriverManager.getConnection("mysql:\\localhost:1520", "root", "root");
PreparedStatement preStatement = conn.prepareStatement("select distinct loan_type from loan where bank=?");
preStatement.setString(1, "Citibank");
ResultSet result = preStatement.executeQuery();



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值