Cómo evitar problemas con magic quotes - Cómo evitar problemas con magic quotes

1 - Cómo evitar problemas con magic quotes


Tutorial creado por Patxi Echarte . Extraido de: http://www.eslomas.com/index.php/archives/2005/10/13/como-evitar-problemas-con-magic-quotes/
27 Abril 2006
""

Para empezar, ni siquiera el nombre es apropiado, no hay nada de mágico en ello, un nombre mucho más apropiado hubiera sido “Escapado automático de comillas”.

El objetivo inicial de esta funcionalidad era que el desarrollador pudiera utilizar directamente los datos y pasarlos por ejemplo a una consulta SQL, sin tener que hacer un addslashes previamente, sin embargo, lo que de primeras puede parecer una buena idea, se convierte en una pesadiila en cuanto se mira con un poco más de detenimiento, incluso en la propia página oficial de PHP se recomienda desactivar esta funcionalidad.


Es habitual encontrar páginas en las que el texto aparece con slashes precediendo a cualquier comilla, esto suele ser fruto de la utilización de alguna aplicación que no controla correctamente esta funcionalidad. El principal problema es la portabilidad, puedes escribir una aplicación completa utilizando esta funcionalidad, manejando incluso todos los posibles casos correctamente, para encontrarte a la hora de la verdad, cuando tienes que instalar la aplicación en un nuevo servidor, con multitud de fallos debidos a que su configuración no es la misma que tú habías utilizado.


Es por esto que desde hace mucho tiempo se recomienda desactivar la funcionalidad y desarrollar aplicaciones utilizando addslashes, o el método de escapado que corresponda a cada situación. Aún así puede darse el caso de que lleguemos a un servidor que tenga las magic quotes activadas, con lo que al realizar un addslashes, estaríamos haciéndolo dos veces, una ” enviada por el usuario pasaría a ser \\”, y podría guardarse en base de datos por ejemplo como \”.


Para evitar esto utilizo desde hace bastante tiempo en todos los desarrollos que hago, una función a la que llamo al comienzo de cada petición y que se encarga de revisar, en los casos en los que las magic quotes están activadas, las matrices $_GET, $_POST y $_COOKIE haciendo un stripslashes de sus contenidos.


function& fixMagicQuotes($data)
{
if (get_magic_quotes_gpc() == 1){
if (is_array($data))
return array_map('fixMagicQuotes', $data);
else
return stripslashes($data);
}
else return $data;
}

Esta función hace un stripslashes sobre el parámetro de la entrada, chequeando antes si es un array, en cuyo caso se llama de forma recursiva con cada uno de los elementos de la matriz. El siguiente fragmento de código muestra un ejemplo de utilización:


$_GET =& fixMagicQuotes($_GET);
$_POST =& fixMagicQuotes($_POST);
$_COOKIE =& fixMagicQuotes($_COOKIE);

Si no utilizas las variables de sistema $_GET, $_POST y $_COOKIE, sino que tienes activado el register_globals, deberías pasar esta función por los parámetros que utilices, lo cual puede ser un poco lioso y una buena fuente de errores, o sea, otra buena razón por la que no tener activadas las register_globals, pero eso es ya otra historia… ;)

""

Autor y licencia de 'Cómo evitar problemas con magic quotes'

De forma general todos los contenidos de este web están sujetos a una licencia del tipo Creative Commons “Algunos derechos reservados”. Salvo que se diga lo contrario la única restricción impuesta si quieres utilizar algo de lo que aparece en este web, es la de indicar que el autor soy yo, Patxi Echarte.
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.