En realidad, cualquiera haya sido el motivo por el cuál se creo esa directiva, es un problema más que una solución, y es por eso que ya ha desaparecido en PHP 6 (
ver). Fuera de la carga al servidor, el máximo problema era/es justamente lo que
GatorV menciona: No todos los servidores tienen la misma configuración. magic_quotes, register_globals, y otras directivas tan variables entre distintos servidores hacen que un programador deba pensar tanto en A como en B.
Ejemplo, tengo un formulario. Si asumo que el servidor tiene magic_quotes en ON, entonces no será necesario hacer nada con los datos de entrada, pues hasta cierto punto ya son seguros. Obviamente el script pensado así fallará en servidores con magic_quotes OFF. Ahora, si asumo que magic_quotes está OFF, entonces en el script tendremos que escapar los datos del formulario. Eso es lo ideal. Pero si corremos ese script en un servidor con magic_quotes ON, los datos serán escapados dos veces. Y eso ya es un problema.
Es cierto, hay una función que permite ver el estado de magic_quotes (
get_magic_quotes_gpc()) para decidir si se deben escapar o no los datos previo procesamiento. Sin embargo es poco usada. He visto infinidad de scripts que asumen una u otra posición, pero no las dos.
Esta "inestabilidad", mejor digo variabilidad, es lo que hace que magic_quotes, a mi parecer, sea un problema. Si tuviese un comportamiento constante, sin duda sería una gran ayuda.
Saludos,