【问题标题】:How to remove magic quotes if php.ini/.htaccess are not editable?如果 php.ini/.htaccess 不可编辑,如何删除魔术引号?
【发布时间】:2011-11-25 07:47:25
【问题描述】:

由于某种原因,我所有的引号都被转义并显示为 \"。以前还可以。然后我查看了 phpinfo(),发现我的 magic_quotes_gpc 已打开。但是,我找不到目录 /usr /local/lib/ php.ini 文件所在的位置,我无法编辑 .htaccess 文件(出现 500 内部服务器错误)。

我尝试将它放在我的脚本文件(包含在所有页面中)的顶部:

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}

但是,我页面上的 " 和 ' 仍然有反斜杠。

我做错了什么?

【问题讨论】:

  • 联系或更换您的虚拟主机。
  • 您使用变量引用/别名的方式实际上并没有按照您的想法进行。我建议基于$GLOBALS 数组构建一些东西(根本不需要引用)。但实际上根本原因是您配置错误的虚拟主机。启用 GPC 的魔术引号表明您的虚拟主机没有安全感。
  • 你在 .htaccess 文件中放了什么?另外,你试过ini_set('magic_quotes_runtime', 0);
  • php.net/manual/en/security.magicquotes.disabling.php#91653 中选择一个其他示例,并确保它确实是您的 php 脚本中调用的第一件事。
  • 您已经创建了对数组的引用,但是您的循环没有使用它们生成的键的引用,因此您正在转义数据的副本而不是原始数据。

标签: php escaping magic-quotes-gpc


【解决方案1】:

您使用哪个 PHP 版本?

如果您使用大于5.2 的版本,则可以使用filter_input()filter_input_array()。它似乎忽略了magic_quotes_gpc-directive 的设置并使用原始数据(默认过滤器为FILTER_UNSAFE_RAW

【讨论】:

    【解决方案2】:

    试试这个代码,它过去对我有用。

    <?php
    if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
            $quotes_sybase = strtolower(ini_get('magic_quotes_sybase'));
            $unescape_function = (empty($quotes_sybase) || $quotes_sybase === 'off') ? 'stripslashes($value)' : 'str_replace("\'\'","\'",$value)';
        $stripslashes_deep = create_function('&$value, $fn', '
            if (is_string($value)) {
                $value = ' . $unescape_function . ';
            } else if (is_array($value)) {
                foreach ($value as &$v) $fn($v, $fn);
            }
        ');
    
        // Unescape data
        $stripslashes_deep($_POST, $stripslashes_deep);
        $stripslashes_deep($_GET, $stripslashes_deep);
        $stripslashes_deep($_COOKIE, $stripslashes_deep);
        $stripslashes_deep($_REQUEST, $stripslashes_deep);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 2011-10-03
      • 2010-09-14
      • 2021-07-24
      • 2010-09-18
      • 1970-01-01
      • 2012-10-16
      • 2015-05-19
      • 2015-06-01
      相关资源
      最近更新 更多