【问题标题】:What are magic quotes runtime in PHP?PHP中的魔术引号运行时是什么?
【发布时间】:2011-01-08 06:39:43
【问题描述】:

我完全意识到 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');当魔术报价开启时。我不依赖他们!

【问题讨论】:

    标签: php magic-quotes


    【解决方案1】:

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

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

    【讨论】:

    • 如果链接包含答案,为什么不直接写链接?
    • @mck89 因为它需要用户寻找解决方案,并且链接可能会更改,但此处发布的文本不会。 (删除-1)
    • magic_quotes_runtime @ ON 是不是很麻烦?我应该在打开时关闭它们吗?甚至 exit() 脚本并带有一条消息告诉关闭 em?
    • 但是你为什么要使用它们呢?它已被弃用,因此如果您正在编写代码,请不要使用它。无论如何,如果您必须设置magic_quotes_runtime,请将其设置为false,因为如果您查看我在页面顶部写的链接,则默认值为false。
    • 我没有使用它们。我想知道如果它们打开该怎么办(让它们保持打开状态,关闭它们,退出()脚本并发出警告......)。
    【解决方案2】:

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

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

    它邪恶的原因与addslashes() 和mysql_escape_string() 邪恶的原因是一样的——因为它没有捕捉到在字符串中添加引号的所有可能方法。它给你一种错误的安全感,认为你不必再担心转义引号,而实际上你仍然这样做。

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

    【讨论】:

    • 不问什么是“魔法行情”,我太了解了。我要问的是什么是“magic_quotes_runtime”?此设置会转义哪些数据?
    • @AlexV - 这两个设置一起工作。 GPC 用于 POST、GET 和 COOKIE 数据,运行时用于或多或少的其他所有内容(文件、mysql 等)。如果您的问题是“'其他一切'到底是什么?”然后 alexb 在他的链接中有答案。
    • 这是 mck89 链接而不是 alexb 之一 :)
    【解决方案3】:

    您可以使用 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-09-18
      • 2012-05-20
      • 2011-05-17
      • 2012-05-05
      • 2011-02-13
      • 1970-01-01
      • 2012-10-16
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多