当前位置:  开发笔记 > 编程语言 > 正文

PHP中的魔术引号

如何解决《PHP中的魔术引号》经验,为你挑选了3个好方法。

根据PHP手册,为了使代码更具可移植性,他们建议使用以下内容来转义数据:

if (!get_magic_quotes_gpc()) {
    $lastname = addslashes($_POST['lastname']);
} else {
    $lastname = $_POST['lastname'];
}

我还将进行其他验证检查,但上述严格来说,在逃避数据方面有多安全?我还看到在PHP 6中将不推荐使用魔术引号.这将如何影响上述代码?我宁愿不依赖于像mysql_real_escape_string()这样的特定于数据库的转义函数.



1> sk...:

魔术引言本来就被打破了.它们旨在清理PHP脚本的输入,但不知道如何使用该输入,就无法正确清理.如果有的话,最好检查魔术引号是否已启用,然后在$ _GET/$ _ POST/$ _ COOKIES/$ _ REQUEST上调用stripslashes(),然后在某处使用它时清理变量.例如urlencode()如果你在URL中使用它,htmlentities()如果你将它打印回网页,或者使用数据库驱动程序的转义函数(如果你将它存储到数据库中).请注意,那些输入数组可能包含子数组,因此您可能需要编写一个函数可以递归到子数组中以去除这些斜杠.

关于魔术引号的PHP 手册页同意:

"从PHP 5.3.0开始,此功能已被弃用,从PHP 5.4.0开始被删除.非常不鼓励依赖此功能.Magic Quotes是一个自动将传入数据转义为PHP脚本的过程.最好用魔法编码引用关闭,并根据需要在运行时转义数据."


在PHP 5.4中删除
除了PHP6从未见过光明的一天.

2> MarkR..:

魔术引号是一个设计错误.它们的使用与保持理智是不相容的.

我更喜欢:

if (get_magic_quotes_gpc()) {
   throw new Exception("Turn magic quotes off now!");
}

不要编写与本质上破坏的设置兼容的代码.而是通过让代码快速失败来防止使用它们.



3> Jeremy Ruten..:

我在我的网站的头文件中使用以下代码来反转magic_quotes的效果:

 $value) {
            if (is_array($value)) {
                stripslashes_array($array[$key], $iterations + 1);
            } else {
                $array[$key] = stripslashes($array[$key]);
            }
        }
    }
}

if (get_magic_quotes_gpc()) {
    stripslashes_array($_GET);
    stripslashes_array($_POST);
    stripslashes_array($_COOKIE);
}

?>

然后我可以编写其余的代码,好像magic_quotes从未存在过一样.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有