防止SQL注入方法总览(整理)
2016-08-31 20:44
204 查看
字符串检测:但是限定内容只能由英文、数字等常规字符,如果检查到用户输入有特殊字符,直接拒绝。但缺点是,系统 中不可避免地会有些内容包含特殊字符,这时候总不能拒绝入库,也就是说如果硬要使用字符串检测的方案来做,存在误杀。
字符串替换:把危险字符替换成其他字符,但是危险字符可能比较多,一一枚举会比较麻烦,而且不同编码也要考虑进去,所以可能存在漏网之鱼。
存储过程:把参数传到存储过程进行处理,但是有些数据库不支持存储过程。而且如果存储过程中执行的命令也是通 过拼接字符串出来的,还是会有漏洞。
参数化查询:访问数据库时,在需要填入数值或数据的地方,使用参数 来给值。
比如 mysql SQL代码
此时@n是sql语句的一部分。
具体各个语言,各个数据库的参数化查询是怎么样,依据实际。
php下 使用mysqli
规格表
java 下,使用jdbc包
字符串替换:把危险字符替换成其他字符,但是危险字符可能比较多,一一枚举会比较麻烦,而且不同编码也要考虑进去,所以可能存在漏网之鱼。
存储过程:把参数传到存储过程进行处理,但是有些数据库不支持存储过程。而且如果存储过程中执行的命令也是通 过拼接字符串出来的,还是会有漏洞。
参数化查询:访问数据库时,在需要填入数值或数据的地方,使用参数 来给值。
比如 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 类型 |
d | double类型 |
s | string 类型 |
b | blob类型 |
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();
相关文章推荐
- Mybatis like 查询 防止SQL注入方法相关原理和解决方法整理
- 防止Session丢失方法整理
- 防止sql注入的简单方法
- 最近sql注入数据库被更改泛滥,以下提供一个.net程序防止sql注入的方法
- 5种方法防止 jsp被sql注入
- Ibatis like 查询防止SQL注入的方法
- [转自横渡博客]ASP.net防止SQL注入方法
- .net程序防止sql注入的方法
- 防止sql注入的方法!
- 防止SQL注入漏洞的方法
- 最近sql注入数据库被更改泛滥,以下提供一个.net程序防止sql注入的方法
- 对sql注入和防止"or"="or"的修复方法!
- .net程序防止sql注入的方法
- 使用TryParse方法 防止sql注入
- .net防止SQL注入方法
- .net防止SQL注入的方法
- 对sql注入和防止"or"="or"的修复方法!
- 防止SQL注入的方法
- ASP.net防止SQL注入方法
- 5种方法防止 jsp被sql注入