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

我完全意识到PHP中魔术引号的畸变,它是如何邪恶的,我避免它们像害虫,但什么是magic_quotes_runtime ? 来自php.ini:

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

是的,我应该检查如果打开并关闭:

set_magic_quotes_runtime(false);

默认情况下它常常打开吗? 我知道它已在5.3.0中被弃用,并在6.0.0中被删除,但由于我的脚本支持5.1.0+,我想知道如何在“传统”PHP(如果相关)中处理这个问题。

编辑:为了弄清楚我想退出('关闭魔术引号'); 当魔术引号打开时。 我不依赖他们!


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

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


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

如果你使用诸如addslashes(),mysql_escape_string()或mysql_real_escape_string()等带有魔术引号的东西,那么你最终会得到双转义引号。

这是邪恶的原因是相同的原因addslashes()和mysql_escape_string()是邪恶的 - 因为它并没有捕获每一个可能的方法在字符串中的报价。 它给你一种错误的安全感,认为在现实中你不需要担心逃脱引号。

此外,就好像转义字符串还不够PITA一样,现在您必须在尝试转义或取消转义字符串以避免双重转义之前检查魔术引号是打开还是关闭。


您可以使用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

链接地址: http://www.djcxy.com/p/26567.html

上一篇: What are magic quotes runtime in PHP?

下一篇: Magic quotes in PHP