SQL注入 预防

防注入的方式

针对数字型注入

可以简单的选择类型强制转换
intval()函数,会强制对参数处理。
注意:对于字符型的注入则没有意义

针对字符型注入

使用函数

1。addslashes() 把单引号转移
2。mysql_real_escape_string() mysql自带的安全函数。

使用PDO连接数据库

对字符型和数字型都有效:特指绑定参数的方式
使用PDO需要注意连接数据库的两种方式,如果是拼接方式,则不但不能预防SQL注入,而且会引入新的漏洞,多语句注入问题。

事例(PDO绑定参数)

// 使用PDO连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=item', 'root','root');
$sql="select * from item.users where uname = :uname and passwd = :passwd";

$result=$pdo->prepare($sql);
//$result->bindParam(':uname',$uname,PDO::PARAM_STR, 12);
//$result->bindParam(':passwd',$upass,PDO::PARAM_STR, 12);
$result->execute( array( ':uname' => $uname,':passwd'=> $upass));
//$result->execute();
$res=$result->fetchAll(PDO::FETCH_ASSOC); // 取出来的数组是二维数组
                                          // fetch()是获取结果的下一行,是一维数组
print_r($res);

注意点

在代码编写时,如果已经对接受的参数进行转义,就不要对其进行二次操作,直到传入数据库。这样可以有效防止人为二次操作造成的SQL注入漏洞。


   转载规则


《SQL注入 预防》 Evolyutsiya 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录