代码之家  ›  专栏  ›  技术社区  ›  AlexV

什么是PHP中的magic quotes运行时?

  •  10
  • AlexV  · 技术社区  · 15 年前

    我完全知道PHP中的魔法引语的异常,它是如何邪恶的,我像害虫一样避免它们,但是什么是 magic_quotes_runtime ?来自PHP.ini:

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

    是我应该检查是否打开和关闭的功能:

    set_magic_quotes_runtime(false);
    

    默认情况下经常打开吗?我知道它在5.3.0中被否决,在6.0.0中被删除,但是由于我的脚本支持5.1.0+我想知道如何在“遗留”PHP中处理它(如果它相关的话)。

    编辑: 为了使事情清楚,我想退出(“关闭魔术引号”);当魔术引号打开时。我不依赖他们!

    3 回复  |  直到 15 年前
        1
  •  6
  •   grapefrukt    15 年前

    如果启用magic_quotes_运行时,大多数从任何类型的外部源(包括数据库和文本文件)返回数据的函数都将使用反斜杠转义引号。如果magic_quotes_Sybase也处于启用状态,则使用单引号而不是反斜杠转义单引号。

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

        2
  •  0
  •   Eric Petroelje    15 年前

    如果启用了magic引号,PHP将自动转义Post中的引号或获取变量,并在从数据库中提取数据时自动取消转义。

    如果您使用诸如addslashes()、mysql_escape_string()或mysql_real_escape_string()之类的东西并加上引号,那么您将得到双转义引号。

    邪恶的原因与addslashes()和mysql_escape_string()邪恶的原因相同,因为它没有捕获在字符串中放入引号的所有可能方法。它给了你一种错误的安全感,认为你不必再担心在现实生活中你仍然需要逃避引用。

    另外,好像转义字符串还不足以构成pita,现在您必须在尝试转义或取消转义字符串之前检查是否打开或关闭了魔力引号,以避免重复转义。

        3
  •  0
  •   AlexB    15 年前

    您可以使用ini-get检查其值,如下所示:

    ini_get('magic_quotes_runtime');
    

    此外,您还应该包装调用,以便在函数中设置“magic”quotes“runtime/get”magic“quotes”runtime“exists calls”,如下所示:

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

    但是,当然,一个人不应该完全依赖于魔法引语,如果可能的话,应该禁用它们。使用此链接有以下原因: http://www.php.net/manual/en/security.magicquotes.whynot.php

    推荐文章