10

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

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

是我应该检查是否打开和关闭的东西:

set_magic_quotes_runtime(false);

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

编辑:为了清楚起见,我想退出('Turn OFF Magic Quotes');当魔术报价开启时。我不依赖他们!

4

3 回答 3

6

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

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

于 2010-01-22T16:04:01.187 回答
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

于 2010-01-22T16:04:53.770 回答
0

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

如果你使用像 addlashes()、mysql_escape_string() 或 mysql_real_escape_string() 之类的东西,加上魔术引号,你最终会得到双转义引号。

它邪恶的原因与 addlashes() 和 mysql_escape_string() 邪恶的原因相同——因为它没有捕获将引号放入字符串的所有可能方法。它给你一种错误的安全感,认为你不必再担心转义引号,而实际上你仍然这样做。

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

于 2010-01-22T16:09:27.987 回答