什么是PHP中的魔术引号运行时?

时间:2010-01-22 15:59:37

标签: php magic-quotes

我完全清楚PHP中魔术引号的异常,它是如何邪恶的,我像害虫一样避免它们,但是magic_quotes_runtime是什么?来自php.ini:

  

运行时生成的魔术引号   数据,例如SQL中的数据,来自exec(),   等

我应该检查是否开启并关闭:

set_magic_quotes_runtime(false);

默认情况下它经常开启吗?我知道它在5.3.0中被弃用并在6.0.0中被删除但是因为我的脚本支持5.1.0+我想知道如何在“遗留”PHP中处理它(如果它是相关的)。

编辑:要明确我要退出('关闭魔术引号');当Magic引号为ON时。我不是在依赖他们!

3 个答案:

答案 0 :(得分:6)

  

如果启用了magic_quotes_runtime,大多数从任何类型的外部源(包括数据库和文本文件)返回数据的函数都会使用反斜杠进行转义。如果magic_quotes_sybase也打开,则使用单引号而不是反斜杠转义单引号。

http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-runtime

答案 1 :(得分:0)

您可以使用ini_get来检查它的值,如下所示:

ini_get('magic_quotes_runtime');

此外,你应该在function_exists调用中包含对set_magic_quotes_runtime / get_magic_quotes_runtime的调用,如下所示:

if (function_exists('set_magic_quotes_runtime')) {
set_magic_quotes_runtime(true/false);
}

但是,当然,根本不应该依赖魔法引用,如果可能的话应该禁用它们。请查看此链接,了解原因:http://www.php.net/manual/en/security.magicquotes.whynot.php

答案 2 :(得分:0)

如果魔术引号为ON,则php会自动转义POST或GET变量中的引号,并在从数据库中提取数据时自动取消它们。

如果你使用带有魔术引号的addslashes(),mysql_escape_string()或mysql_real_escape_string()之类的东西,你最终会双重转义引号。

它的邪恶是因为addslashes()和mysql_escape_string()是邪恶的 - 因为它没有捕获在字符串中放置引号的所有可能方法。它让你有一种虚假的安全感,认为你不必担心在现实中你仍然可以逃避引用。

此外,好像转义的字符串已经不足以支持PITA了,现在你必须先检查魔术引号是否打开或关闭,然后再尝试转义或取消转义字符串以避免双重转义。