Wordpress and magic quotes

时间:2011-07-01 作者:Matthew Groves

我一直在写一些Wordpress插件,我对Wordpress在帖子和获取数据上添加魔力引号有一些问题。

具体而言,wp中的“wp\\u magic\\u quotes”函数包括\\load。php,它在wp设置中被调用(可能在每个响应上)。php。即使我在PHP设置中关闭了magic quotes,此函数也会将magic quotes添加到数据中。

/**
 * Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
 *
 * Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
 * or $_ENV are needed, use those superglobals directly.
 *
 * @access private
 * @since 3.0.0
 */
function wp_magic_quotes() {
    // If already slashed, strip.
    if ( get_magic_quotes_gpc() ) {
        $_GET    = stripslashes_deep( $_GET    );
        $_POST   = stripslashes_deep( $_POST   );
        $_COOKIE = stripslashes_deep( $_COOKIE );
    }

    // Escape with wpdb.
    $_GET    = add_magic_quotes( $_GET    );
    $_POST   = add_magic_quotes( $_POST   );
    $_COOKIE = add_magic_quotes( $_COOKIE );
    $_SERVER = add_magic_quotes( $_SERVER );

    // Force REQUEST to be GET + POST.
    $_REQUEST = array_merge( $_GET, $_POST );
}
我只需在wp设置中注释掉wp\\u magic\\u quotes()调用是否安全。php?也就是说,它是否会对正常的Wordpress代码产生负面影响和/或打开一些漏洞载体?如果是这样的话,除了修改WP代码之外,还有其他方法吗(这样我就不必每次更新都要处理这个问题)?

4 个回复
最合适的回答,由SO网友:Rarst 整理而成

简单地说,WP将不确定的情况(服务器配置中可能启用或不启用魔法引号)转化为确定的情况(魔法引号始终存在,服务器配置并不重要)。

在需要时,只需在自己的变量上去掉代码中的斜杠,而不是对所有WP核心进行处理,这更有意义。

SO网友:two7s_clash

WordPress中当前的行为是基于所有PHP系统和配置的兼容性的最佳实践。WordPress总是规范化要删除的$\\u GET、$\\u POST、$\\u COOKIE和$\\u SERVER,并期望它会继续这样做。

因此,要提取POST或GET参数,我们必须编写:

$value = stripslashes_deep($_POST[\'name\']);

$value = stripslashes_deep($_GET[\'name\']);

SO网友:André Chalella

I wrote a solution for dealing with these superglobal arrays in a similar question in Stack Overflow.

它包括为每个超全局编写一个“访问器方法”(get/set),透明地进行斜杠和剥离。例如,您可以使用:

echo _get(\'username\');    // echo stripslashes_deep($_GET[\'username\']);
_cookie(\'name\', \'value\'); // $_COOKIE[\'name\'] = addslashes_deep(\'value\');
通过这种方式,您可以避免进一步与superglobals混为一谈,并享受一种解决方案,该解决方案将对您的代码“本地”工作,而不会产生任何副作用。对我来说,这是最终的解决方案。

SO网友:Joe

我最近遇到了这个问题,我终于解决了。我基本上在WordPress上搜索了几乎所有的网站上的魔法语录,但没有一个有用。

以下是修复方法:

进入wp设置。php

搜索wp\\u magic\\u quotes();

只要把它评论出来,现在就应该可以了

这是有效的,因为如果您查看该代码之前的内容,您将看到:

// Disable magic quotes at runtime. Magic quotes are added using wpdb later in //wp-settings.php.

@ini_set( \'magic_quotes_runtime\', 0 );
@ini_set( \'magic_quotes_sybase\',  0 );
后来使用wpdb添加的魔法引号让大多数人都很困惑,它恰好是wp\\u Magic\\u quotes()。只需将其注释掉,就可以防止神奇的引语把你弄糊涂。

结束