Curso Acelerado de Seguridad - Episodio 2 - Inyecciones SQL

Este artículo fue escrito por Damien Metzger, y publicado por primera vez en el blog de PrestaShop, el 8 de agosto de 2011.

Una inyección de SQL es cuando un hacker ingresa datos maliciosos en una consulta SQL. Este tipo de ataques va en aumento y es necesario protegerse ya que es muy fácil modificar la naturaleza de la consulta sin protección suficiente.

Nos gustaría ilustrar esto con un ejemplo, en lugar de una larga explicación. Esto es lo que puede suceder en una página de login.

Su consulta:

SELECT id FROM users WHERE email = ‘damien@prestashop.com' AND password = ‘$plop'

Método:

  • El hacker establece la siguiente contraseña: ‘ OR ‘1' = ‘1

  • La consulta resultante es:

    SELECT id FROM users WHERE email = ‘damien@prestashop.com' AND password = ‘‘ OR ‘1' = ‘1'

Siempre envía el ID de usuario sin tener que conocer la contraseña.

Entonces, ¿cómo podemos protegernos? ¡Es bastante simple, siempre y cuando recuerde realizarlo todo el tiempo!

Existen 2 tipos comunes de inyecciones:

  1. Explotación de la falta de protección en torno a comillas y comillas dobles

  2. Explotación de la falta de protección de datos

Para el primer tipo, debe "escapar" de las comillas simples y dobles, con una función adecuada

  • La función estándar de PHP es addslashes().

  • Puede usar la función mysql_real_escape_string() si puede conectar para abrir MySQL. Esta función también incluye algunos caracteres adicionales.

  • Utilice pSQL() en PrestaShop. Es extremadamente cuidadoso con algo parecido a HTML y maneja las comillas mágicas (las comillas mágicas son una configuración en algunos servidores que escapan comillas de forma automática; En teoría son una buena idea, pero su presencia o ausencia puede ocasionar diferencias en la naturaleza de algunos servidores. PrestaShop no recomienda el uso de comillas mágicas).

Para el segundo tipo, que afecta principalmente a los datos numéricos, sólo debe realizar una conversión. ¡Es mucho más difícil explotar una consulta si usted se limita a números enteros y de punto flotante!

La mayoría de herramientas que proporcionan una capa de abstracción para acceder a la base de datos, incluyen diversos mecanismos de protección. Enlazar parámetros es una forma particularmente buena para proteger consultas.

Existen herramientas que intentan inyecciones para poner a prueba las secuencias de comando. Puesto que usted no es un hacker sofisticado y no existe ninguna garantía de seguridad, esta es una buena manera de comprobar que no ha olvidado nada. Vamos a informarle sobre las elecciones en Suecia el año pasado. Los votantes están legalmente permitidos a completar sus boletas a mano. Como el resultado fue muy ajustado, el gobierno decidió publicar anónimamente la lista de votos electorales en papel. Entre los muchos nombres de los candidatos, uno muy astuto e inteligente había escrito "pwn DROP TABLE VALJ" en su boleta de votación a sabiendas de que las boletas se iban a digitalizar y a introducir en una base de datos. ¿Por qué? Para eliminar completamente la tabla de resultados! Cualquier cosa es posible cuando se lo proponen.

Last updated