您的位置:首页 > 数据库

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

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

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

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

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

      比如 mysql  SQL代码

     此时@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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: