Eu tenho escrito alguns plugins do Wordpress e tenho tido algum problema com o Wordpress colocando aspas mágicas nos dados POST e GET.
Especificamente, a função "wp_magic_quotes" em \ wp-includes \ load.php, chamada (presumivelmente em todas as respostas) em wp-settings.php. Essa função adiciona aspas mágicas aos dados, mesmo que eu desative aspas mágicas nas configurações do 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 );
}
É seguro eu apenas comentar a chamada wp_magic_quotes () em wp-settings.php? Ou seja, isso afetará negativamente o código normal do Wordpress e / ou abrirá algum vetor de exploração? Se sim, existe alguma outra maneira de fazer isso além de modificar o código WP (para que eu não precise lidar com isso toda vez que houver uma atualização)?
wp_magic_quotes()
é executada? Não consegui encontrar a execução no wp-core.Respostas:
Basta colocar o WP transforma a situação indeterminada (aspas mágicas pode ou não estar ativada na configuração do servidor) em determinada (aspas mágicas sempre estão presentes e a configuração do servidor não importa).
Em vez de mexer com isso em todo o núcleo do WP, faz muito mais sentido simplesmente remover barras no seu código em suas próprias variáveis, quando você precisar.
fonte
O comportamento atual no WordPress é uma prática recomendada com base na compatibilidade de todos os sistemas e configurações PHP. O WordPress sempre normalizou as barras $ _GET, $ _POST, $ _COOKIE e $ _SERVER para serem cortadas, e espera-se que continue assim.
Portanto, para extrair um parâmetro POST ou GET, precisamos escrever:
$value = stripslashes_deep($_POST['name']);
oufonte
Eu acho que os seguintes links podem ajudar:
fonte
Eu escrevi uma solução para lidar com essas matrizes superglobais em uma pergunta semelhante no Stack Overflow.
Consiste em escrever um único "método de acesso" (obter / definir) para cada superglobal, cortando e removendo transparentemente. Então você usaria, por exemplo:
Dessa forma, você pode evitar mexer ainda mais com os superglobais e aproveitar uma solução que funcione "localmente" para o seu código, sem efeitos colaterais. Para mim, foi a solução definitiva.
fonte
Recentemente, tive esse problema e finalmente descobri. Eu estava basicamente pesquisando quase todos os sites sobre citações mágicas no WordPress e nenhum deles ajudou.
Isto é como corrigi-lo:
Vá para o seu wp-settings.php
Procure por wp_magic_quotes ();
Basta comentar e deve funcionar agora
Isso funciona porque se você olhar antes desse código, verá:
Que o Magic cita que é adicionado mais tarde usando o wpdb é o que está atrapalhando a maioria das pessoas, e é wp_magic_quotes (). Apenas comentar isso evita que as aspas mágicas estraguem você.
fonte