Я писал несколько плагинов для 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.Связанные сообщения о переполнении стека: почему с отключенными «волшебными кавычками» PHP/WordPress продолжает автоматически экранировать мои данные POST? и PHP 7.2: сообщение формы HTTP, что-то ускользает от одинарных кавычек с обратной косой чертой. Волшебные кавычки были убраны в 5.x
Эта проблема все еще существует в 2019 году, более 8 лет спустя (например, с PHP 7.1.33 (2019-10-23) и WordPress 5.2.4 (2019-10-14)).
Проще говоря, WP превращает неопределенную ситуацию (волшебные кавычки могут быть включены, а могут и не включаться в конфигурации сервера) в детерминированную (волшебные кавычки всегда присутствуют, и конфигурация сервера не имеет значения).
Вместо того, чтобы возиться с этим для всего ядра WP, гораздо разумнее просто убрать косые черты в вашем коде на ваших собственных переменных, когда вам это нужно.