Wordpress y citas mágicas

10

He estado escribiendo algunos complementos de Wordpress, y he tenido algún problema con Wordpress poniendo comillas mágicas en los datos POST y GET.

Específicamente, la función "wp_magic_quotes" en \ wp-includes \ load.php, que se llama (probablemente en cada respuesta) en wp-settings.php. Esta función agrega citas mágicas a los datos, incluso si desactivo las citas mágicas en la configuración de 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 );
}

¿Es seguro para mí simplemente comentar la llamada wp_magic_quotes () en wp-settings.php? Es decir, ¿afectará negativamente al código normal de Wordpress y / o abrirá algún vector de explotación? Si es así, ¿hay alguna otra forma de hacerlo además de modificar el código WP (para que no tenga que lidiar con esto cada vez que haya una actualización)?

    
pregunta Matthew Groves 01.07.2011 - 03:19

5 respuestas

6

Simplemente, WP convierte la situación indeterminada (las comillas mágicas podrían o no estar habilitadas en la configuración del servidor) en determinadas (las comillas mágicas siempre están presentes y la configuración del servidor no importa).

En lugar de meterse con esto para todo el núcleo de WP, tiene mucho más sentido simplemente quitar barras en tu código en tus propias variables, cuando lo necesites.

    
respondido por el Rarst 01.07.2011 - 11:48
2

El comportamiento actual en WordPress es la mejor práctica basada en la compatibilidad de todos los sistemas y configuraciones de PHP. WordPress siempre ha normalizado la reducción de $ _GET, $ _POST, $ _COOKIE y $ _SERVER, y espera que continúe haciéndolo.

Entonces, para extraer un parámetro POST o GET tenemos que escribir:

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

$value = stripslashes_deep($_GET['name']);
    
respondido por el two7s_clash 01.07.2011 - 20:02
0

Creo que los siguientes enlaces podrían ayudar:

respondido por el Abhay 01.07.2011 - 04:08
0

Escribí una solución para tratar con estos arreglos superglobal en una pregunta similar en Stack Overflow.

Consiste en escribir un solo "método de acceso" (obtener / configurar) para cada superglobal, cortar y eliminar de forma transparente. Así que usarías, por ejemplo:

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

De esta manera, puede abstenerse de ensuciar aún más con los superglobales y disfrutar de una solución que funcionará "localmente" para su código, sin efectos secundarios. Para mí, fue la solución definitiva.

    
respondido por el André Chalella 09.11.2015 - 15:20
-3

Hace poco tuve este problema y finalmente lo resolví. Básicamente, busqué en casi todos los sitios web sobre citas mágicas en wordpress y ninguno de ellos me ayudó.

Esto es cómo solucionarlo:

1) entra en tu wp-settings.php

2) busca wp_magic_quotes ();

3) simplemente coméntalo y debería funcionar ahora

razón por la que esto funciona

Esto funciona porque si ves antes de ese código verás:

// Desactivar citas mágicas en tiempo de ejecución. Las citas mágicas se agregan usando wpdb más adelante en //wp-settings.php.

@ini_set ('magic_quotes_runtime', 0); @ini_set ('magic_quotes_sybase', 0);

Esa cita de Magic que se agrega más adelante con wpdb es lo que está arruinando a la mayoría de las personas y resulta que es wp_magic_quotes (). Solo comentando eso evitará que las citas mágicas te arruinen.

    
respondido por el Joe 31.03.2013 - 19:44

Lea otras preguntas en las etiquetas