Wordpress и волшебные цитаты


Я написал несколько плагинов Wordpress, и у меня возникли некоторые проблемы с тем, чтобы Wordpress помещал волшебные кавычки в публикации и ПОЛУЧАЛ данные.

В частности, функция "wp_magic_quotes" в \wp-includes\load.php, который вызывается (предположительно при каждом ответе) в wp-settings.php . Эта функция добавляет магические кавычки к данным, даже если я отключу магические кавычки в настройках PHP.

/**
 * 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_magic_quotes() wp-settings.php? То есть, это негативно повлияет на обычный код Wordpress и/или откроет какой-то вектор эксплуатации? Если да, то есть ли какой-то другой способ сделать это помимо изменения кода WP (чтобы мне не приходилось иметь дело с этим каждый раз при обновлении)?

 13
Author: Matthew Groves, 2011-07-01

5 answers

Проще говоря, WP превращает неопределенную ситуацию (магические кавычки могут быть включены или не включены в конфигурации сервера) в определенную (магические кавычки всегда присутствуют, и конфигурация сервера не имеет значения).

Вместо того, чтобы возиться с этим для всего ядра WP, гораздо разумнее просто удалять косые черты в вашем коде для ваших собственных переменных, когда вам это нужно.

 8
Author: Rarst, 2011-07-01 09:48:07

Текущее поведение в WordPress является лучшей практикой, основанной на совместимости всех систем и конфигураций PHP. WordPress всегда нормализовал $_GET, $_POST, $_COOKIE и $_SERVER для сокращения и ожидает, что он будет продолжать это делать.

Итак, чтобы извлечь сообщение или параметр GET, мы должны написать:

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

$value = stripslashes_deep($_GET['name']);
 4
Author: two7s_clash, 2011-07-01 18:02:58

Я думаю, что следующие ссылки могут помочь:

 0
Author: , 2011-07-01 02:08:26

Я написал решение для работы с этими суперглобальными массивами в аналогичном вопросе в разделе Переполнение стека.

Он состоит из написания одного единственного "метода доступа" (get/set) для каждого суперглобального, прозрачного сокращения и удаления. Таким образом, вы бы использовали, например:

echo _get('username');    // echo stripslashes_deep($_GET['username']);
_cookie('name', 'value'); // $_COOKIE['name'] = addslashes_deep('value');

Таким образом, вы можете воздержаться от дальнейших манипуляций с суперглобальными и наслаждаться решением, которое будет работать "локально" для вашего кода без каких-либо побочных эффектов. Для меня это было окончательным решение.

 0
Author: André Chalella, 2017-05-23 12:40:05

Недавно у меня была эта проблема, и я наконец-то разобрался в ней. Я в основном искал почти каждый веб-сайт на волшебных цитатах на WordPress, и ни один из них не помог.

Вот как это исправить:

  1. Войдите в свой wp-settings.php

  2. Поиск wp_magic_quotes();

  3. Просто прокомментируйте это, и это должно сработать сейчас

Это работает, потому что, если вы посмотрите перед этим кодом, вы увидите:

// 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_magic_quotes(). Просто прокомментируйте это, чтобы волшебные цитаты не сбили вас с толку.

 -3
Author: Joe, 2019-12-01 07:46:11