附:在理解了 PHP官网 上相应的资料后,自己总结理解如下,欢迎大家赐教。
(1)使用magic quotes 影响了PHP的可移植性。加入代码依赖于这一配置,当移植到不支持(或未开启)magic quotes的服务器时,可能无法有效防止SQL注入。PS:可以在代码中使用 get_magic_quotes_gpc() 来检查其是否开启。
(2)性能方面。并非每一份数据都要存储到数据库中,在运行时用其他转义函数(如addslashes())效率会更好。
(3)使用起来麻烦。并非每一份数据都需要转义,如,从表单中获取的email地址,会被添加一些‘\’,为了解决这个问题,会引入额外的 stripslashes() 。
下面介绍一种防SQL注入的改进方法:
//判断是否开启magic_quotes; if (!@get_magic_quotes_gpc()) { $_GET = sec($_GET); $_POST = sec($_POST); $_COOKIE = sec($_COOKIE); } function sec(&$array){ //如果是数组,遍历数组,递归调用 if (is_array($array)) { foreach ($array as $key => $value){ $array[$key] = sec($value); } }elseif (is_string($array)){ //使用addslashes函数来处理 $array = addslashes($array); }elseif (is_numeric($array)){ //使用intval来处理数字; $array = intval($array); } return $array; }