Php 围绕神奇的引语工作,或者只是确保它们';你走了?

Php 围绕神奇的引语工作,或者只是确保它们';你走了?,php,magic-quotes-gpc,Php,Magic Quotes Gpc,是否值得将我的代码更改为“更具可移植性”并能够处理可怕的魔法引号,还是应该确保它始终通过.htaccess文件关闭 if (get_magic_quotes_gpc()) { $var = stripslashes($_POST['var']); } else { $var = $_POST['var']; } 对 php_flag magic_quotes_gpc off 如果可能的话,我会确保它关闭(需要访问.htaccess或apache配置)。最好完全避免它,而不是剥

是否值得将我的代码更改为“更具可移植性”并能够处理可怕的魔法引号,还是应该确保它始终通过.htaccess文件关闭

if (get_magic_quotes_gpc()) {
    $var = stripslashes($_POST['var']);
} else {
    $var = $_POST['var'];
}

php_flag magic_quotes_gpc off

如果可能的话,我会确保它关闭(需要访问.htaccess或apache配置)。最好完全避免它,而不是剥离它的行为,因为它需要更多的资源,并且容易出现错误

如果禁用它不是一个选项,那么您的示例代码可能对输入超全局变量($\u GET,$\u POST,…)有用,但请确保不要将其应用于从这些超全局变量以外的源到达的数据。这种滥用


只需确保在关闭magic_quotes_gpc()时,有一个适当的转义机制来保护您免受SQL InCheck的攻击(例如mysql_real_escape_string()或PDO准备的语句)。您可以阅读有关SQL注入预防的更多信息-。

我将使用
获取\u magic\u quotes\u gpc()
检查设置,并执行一个大噪音的错误退出。在错误中,通知管理员正确的设置。

不要同时适应这两种情况。两条代码路径=麻烦的两倍,另外,您很可能会犯错误,忘记在某个地方处理这两种情况

我过去常常检查魔法引号是开着还是关着,如果它们是开着的,就撤销它们的魔法(正如线程中的其他人所建议的)。问题是,您正在更改其他程序员可能期望的配置环境(无论多么愚蠢)

这些天来,我编写代码的时候好像魔法引号是关闭的,在我的主include/bootstrap/always runs文件中,我检查魔法引号是打开还是关闭的。如果它们打开,我抛出一个异常,解释为什么这是一件坏事,并提供如何关闭它们的说明


这种方法允许您编写单一行为的代码,鼓励其他使用您的代码的人正确配置他们的服务器(在PHP6中,神奇的引号将消失),如果有人真的需要魔法引号,他们可以处理你的异常并将他们的生命掌握在自己手中。

另一方面,PHP6将不再支持他们。因此,为他们写下代码在将来可能会有好处。

我现在已经更改了代码-我通常会按照你说的做,但这只是一个复制粘贴工作出错。:)我已修改了我的答案以适应您的更改;)为什么要使用mysql_real_escape_string而不是PDO?SQL注入根本与这个问题无关,只是神奇的引号。我建议你删除这一段以避免混淆。magic_quotes_gpc是作为防止SQL注入的安全措施引入的。禁用时,请务必注意正确的转义程序。在某些情况下,您无法修改管理员设置(例如,在使用远程廉价/免费主机时)。