Articulo de referencia

Citas mágicas

Las comillas mágicas eran una característica del lenguaje de scripting PHP , donde las cadenas se escapaban automáticamente ( los caracteres especiales se anteponían a una barra...

Las comillas mágicas eran una característica del lenguaje de scripting PHP , donde las cadenas se escapaban automáticamente ( los caracteres especiales se anteponían a una barra invertida ) antes de ser transmitidas. Se introdujo para ayudar a los principiantes a escribir comandos SQL funcionales sin necesidad de escape manual. Posteriormente, se describió como una función destinada a evitar que los desarrolladores inexpertos escribieran código vulnerable a ataques de inyección SQL .

Esta característica fue oficialmente descontinuada a partir de PHP 5.3.0 y eliminada en PHP 5.4, debido a problemas de seguridad. [ 1 ]

Concepto

La revisión actual del manual de PHP menciona que la razón de ser de las comillas mágicas era "ayudar a [prevenir] que el código escrito por principiantes fuera peligroso". [ 2 ] Sin embargo, originalmente se introdujo en PHP 2 como una configuración de tiempo de compilación de php.h para msql, que solo escapaba las comillas simples, "facilitando el paso de datos de formulario directamente a consultas msql". [ 3 ] Originalmente se concibió como una "característica de conveniencia, no como una característica de seguridad". [ 4 ] [ 5 ]

El uso de las comillas mágicas se amplió en PHP 3. Las comillas simples, las comillas dobles, las barras invertidas y los caracteres nulos en todos los datos proporcionados por el usuario tienen una barra invertida antepuesta antes de ser pasados ​​al script en las variables globales $_GET, $_REQUEST, $_POSTy $_COOKIE. En teoría, los desarrolladores pueden usar la concatenación de cadenas para construir consultas SQL seguras con los datos proporcionados por el usuario. (Esto era más preciso cuando PHP 2 y PHP 3 estaban vigentes, ya que las bases de datos principales compatibles solo permitían conjuntos de caracteres de 1 byte).

Crítica

Las comillas mágicas estaban habilitadas por defecto en las nuevas instalaciones de PHP 3 y 4, pero podían deshabilitarse mediante la magic_quotes_gpcdirectiva de configuración. Dado que su funcionamiento era interno y no resultaba evidente de inmediato, es posible que los desarrolladores desconocieran su existencia y los posibles problemas que podían generar. La documentación de PHP señalaba varios inconvenientes y recomendaba que, a pesar de estar habilitadas por defecto, debían deshabilitarse. [ 6 ]

Los problemas con las citas mágicas incluían:

  • No todos los datos proporcionados por el usuario están destinados a ser insertados en una base de datos. Pueden mostrarse directamente en pantalla, almacenarse en una sesión o previsualizarse antes de guardar. Esto puede provocar que se añadan barras invertidas donde no se desean y que se muestren al usuario final. Este error suele aparecer incluso en software de uso generalizado. [ 7 ]
  • No todos los datos proporcionados por el usuario y utilizados en una consulta de base de datos se obtienen directamente de fuentes protegidas con comillas mágicas. Por ejemplo, un valor proporcionado por el usuario podría insertarse en una base de datos, protegido con comillas mágicas, y posteriormente recuperarse de la base de datos y utilizarse en una operación posterior. Este último uso no está protegido por comillas mágicas, y un programador inexperto acostumbrado a confiar en ellas podría desconocer la necesidad de protegerlo explícitamente.
  • Independientemente de la protección que ofrezcan las comillas mágicas, solo funcionan para cadenas entre comillas, dejando otras partes de la consulta (como números o nombres de columnas) completamente desprotegidas y dando al desarrollador una falsa sensación de seguridad.
  • Las comillas mágicas también utilizan la funcionalidad genérica proporcionada por addslashes()la función de PHP, que no es compatible con Unicode y aún presenta vulnerabilidades de inyección SQL en algunas codificaciones de caracteres multibyte. mysql_real_escape_string()Se prefieren las funciones específicas de la base de datos, como o, cuando sea posible, las consultas preparadas con parámetros vinculados. [ 8 ] [ 9 ]
  • Si bien muchos sistemas de gestión de bases de datos admiten el uso de una barra invertida para escapar las comillas, el estándar recomienda utilizar otro tipo de comilla. Las comillas mágicas no ofrecen ninguna protección para las bases de datos que no están configuradas para admitir el uso de una barra invertida para escapar las comillas.
  • La portabilidad es un problema si una aplicación se programa bajo el supuesto de que las comillas mágicas están habilitadas y luego se traslada a un servidor donde están deshabilitadas, o viceversa.
  • Agregar comillas mágicas y posteriormente eliminarlas cuando sea necesario genera una pequeña pero innecesaria sobrecarga de rendimiento.
  • Las comillas mágicas no protegen contra otras vulnerabilidades de seguridad comunes, como los ataques de secuencias de comandos entre sitios o los ataques de inyección de encabezados SMTP .

En noviembre de 2005, los desarrolladores principales de PHP decidieron que, debido a estos problemas, la función de comillas mágicas se eliminaría de PHP 6. [ 10 ] Cuando el desarrollo de PHP 6 se estancó y el desarrollo continuó en la rama 5.x, la función se descontinuó en PHP 5.3.0 y se eliminó en 5.4. [ 1 ]

Otros enfoques

  • Algunos lenguajes como Perl [ 11 ] y Ruby [ 12 ] optan por un enfoque que implica la contaminación de datos , donde los datos de fuentes no confiables, como la entrada del usuario, se consideran "contaminados" y no pueden usarse para operaciones peligrosas hasta que se marquen explícitamente como confiables, generalmente después de la validación o codificación. Dado que la construcción de consultas SQL se considera "peligrosa" en este contexto, esto obliga al programador a abordar el problema. La contaminación no resuelve el problema, pero sí resalta aquellos casos donde existe un problema para que el programador pueda resolverlos adecuadamente.
  • Joel Spolsky ha sugerido utilizar una forma de notación húngara que indique si los datos son seguros o no. [ 13 ]
  • Los motores y bibliotecas de bases de datos modernos utilizan consultas parametrizadas para pasar datos a la base de datos de forma independiente de los comandos SQL, lo que reduce considerablemente la necesidad de escapar los datos antes de construir las consultas.

Véase también

Referencias

  1. 1 2 "Citas mágicas" . Manual de PHP . PHP.net. Archivado del original el 8 de febrero de 2014. Consultado el 17 de enero de 2014 .
  2. "PHP: ¿Por qué usar comillas mágicas?" . Documentación de PHP . Consultado el 19 de febrero de 2007 .
  3. "Si la variable MAGIC_QUOTES está definida en el archivo php.h, estas comillas se escaparán automáticamente, lo que facilitará el paso de datos de formulario directamente a consultas msql" . Consultado el 27 de marzo de 2011 .
  4. "Las citas mágicas se entienden a menudo, incluso por programadores PHP experimentados" .
  5. "Re: [ PHP3 ] ¿qué son magic_quotes?" . Lista de correo PHP-dev . 1999-08-27 . Consultado el 2011-01-17 .
  6. "PHP: Por qué no usar comillas mágicas" . Documentación de PHP . Consultado el 19 de febrero de 2007 .
  7. "Las comillas se escapan dos veces al editar un comentario" . Rastreador de problemas de WordPress . Consultado el 19 de febrero de 2007 .
  8. Chris Shiflett. "addslashes() versus mysql_real_escape_string()" . Consultado el 19 de febrero de 2007 .
  9. MySQL AB. "Cambios en la versión 5.0.22 (24 de mayo de 2006)" . Manual de referencia de MySQL 5.0 . Archivado del original el 22 de febrero de 2007. Consultado el 19 de febrero de 2007 .
  10. Grupo PHP (12 de noviembre de 2005). "Actas de la reunión de desarrolladores de PHP" . Consultado el 19 de febrero de 2007 .
  11. Dan Ragle (18 de abril de 2006). "Introducción al modo de contaminación de Perl" . webreference.com . Consultado el 21 de marzo de 2007 .
  12. "Guardando Ruby en la caja fuerte" . Programación en Ruby . Archivado del original el 30 de mayo de 2009. Consultado el 21 de mayo de 2014 .
  13. Joel Spolsky (11 de mayo de 2005). "Cómo hacer que el código incorrecto parezca incorrecto" . Joel on Software: Painless Software Management . Consultado el 19 de febrero de 2007 .
  • Manual de PHP sobre comillas mágicas. Archivado el 8 de febrero de 2014 en Wayback Machine.