Я писал несколько плагинов для Wordpress, и у меня были некоторые проблемы с Wordpress, помещающим волшебные кавычки в данные POST и GET.
В частности, функция «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 (поэтому мне не приходится иметь дело с этим каждый раз, когда происходит обновление)?
wp_magic_quotes()
выполняется? Я не мог найти исполнение в wp-core.Ответы:
Проще говоря, WP превращает неопределенную ситуацию (магические кавычки могут или не могут быть включены в конфигурации сервера) в детерминированные (магические кавычки всегда присутствуют, а конфигурация сервера не имеет значения).
Вместо того, чтобы возиться с этим для всего ядра WP, имеет гораздо больше смысла просто вырезать косые черты в вашем коде по своим собственным переменным, когда вам это нужно.
источник
Текущее поведение в WordPress - лучшая практика, основанная на совместимости всех систем и конфигураций PHP. WordPress всегда нормализует $ _GET, $ _POST, $ _COOKIE и $ _SERVER и ожидает, что так будет и дальше.
Итак, чтобы извлечь параметр POST или GET, мы должны написать:
$value = stripslashes_deep($_POST['name']);
или жеисточник
Я думаю, что следующие ссылки могут помочь:
источник
Я написал решение для работы с этими суперглобальными массивами в аналогичном вопросе в Stack Overflow.
Он состоит из написания одного «метода доступа» (get / set) для каждого суперглобального элемента, прозрачного разреза и удаления. Так что вы бы использовали, например:
Таким образом, вы можете воздерживаться от дальнейших действий с суперглобалами и наслаждаться решением, которое будет работать «локально» для вашего кода без каких-либо побочных эффектов. Для меня это было окончательное решение.
источник
У меня недавно была эта проблема, и я наконец понял это. Я в основном искал почти каждый сайт по волшебным цитатам на WordPress, и ни один из них не помог.
Вот как это исправить:
Зайдите в ваш wp-settings.php
Поиск по wp_magic_quotes ();
Просто закомментируйте это, и оно должно работать сейчас
Это работает, потому что если вы посмотрите перед этим кодом, вы увидите:
Та магия цитаты, которые добавляются позже с использованием wpdb, это то, что вводит в заблуждение большинство людей, и это происходит wp_magic_quotes (). Просто комментируя это, вы не допустите, чтобы магические цитаты испортили вам жизнь.
источник