为什么PHP 5.4.0 开始移除magic quotes

附:在理解了 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;
}                                        
原文地址:https://www.cnblogs.com/scutwang/p/3101434.html