¿Cómo prevenir la inyección SQL?

Autor: | Última modificación: 8 de julio de 2022 | Tiempo de Lectura: 4 minutos
Temas en este post: ,

¿Sabes cómo prevenir la inyección SQL? La inyección de código es el tercer ciberataque más común, según la más reciente versión del ranking de OWASP Top 10. A pesar de ser un riesgo muy conocido por los desarrolladores de aplicaciones web, la inyección de código SQL continúa siendo una amenaza latente para las bases de datos construidas en este lenguaje de programación.

En este post, hablaremos sobre las diferentes técnicas que existen para evitar este tipo de ataques y veremos cuáles son más efectivas que otras. A continuación, te explicaremos cómo prevenir la inyección SQL.

¿Qué es la inyección de SQL?

La inyección de código SQL es la acción de ejecutar comandos en una aplicación web por medio de las entradas de consulta de una base de datos SQL. Si dichas entradas se encuentran desprotegidas, es decir, concatenadas con la ejecución de código dentro de la aplicación, el usuario podría ingresar comandos y ejecutarlos con fines maliciosos.

Si el atacante conoce el lenguaje SQL o cuenta con una herramienta para realizar este tipo de ataques, puede utilizar las entradas del usuario para inyectarle comandos maliciosos a la aplicación y hacer solicitudes dañinas para la base de datos. Dependiendo de la configuración de seguridad, un hacker malicioso podría obtener acceso a todas las tablas, modificarlas o eliminarlas a su antojo si es capaz de ejecutar satisfactoriamente el ataque.

¿Cómo prevenir la inyección SQL?

Ya hemos visto en qué consiste este dañino ciberataque, que solía ocupar el primer puesto en el ranking de OWASP Top 10, en el año 2017. Ahora, veremos cómo prevenir la inyección SQL en una base de datos.

La primera medida, esencial para evitar este ataque, es limitar los premisos de lectura/escritura del usuario. La aplicación debe estar configurada de tal forma que los usuarios no cuenten con más privilegios de los que son estrictamente necesarios. Cabe recordar que los ataques de inyección SQL no son el único ciberataque que amenaza a una página de inicio de sesión.

No obstante, esta configuración por sí sola no es suficiente para evitar un ciberataque de SQL injection. Para ello, se ha desarrollado una medida actualizada y muy efectiva en la defensa de este ataque.

Declaraciones preparadas

🔴 ¿Quieres entrar de lleno a la Ciberseguridad? 🔴

Descubre el Ciberseguridad Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en Ciberseguridad por una semana

Para las versiones antiguas de bases de datos en PHP, existía un protocolo para desinfectar las entradas de los usuarios, por medio de la función «mysql_real_escape_string()», que evitaba el uso de caracteres especiales en las entradas de los usuarios. Sin embargo, a partir de la versión PHP 7, esta función ha quedado desactivada y le ha dado paso a una nueva, conocida como el uso de declaraciones preparadas.

Una sentencia SQL preparada es un proceso de programación que le indica a las entradas cuál es el tipo de valores que espera recibir. De esta forma, se descarta que el usuario ingrese comandos en la entrada que vayan a ser concatenados con la ejecución de código de la aplicación. De este modo, se bloquea la posibilidad de hacer inyecciones de código por medio de una consulta SQL en la página. Por eso, las declaraciones preparadas son la mejor respuesta a la pregunta de cómo prevenir la inyección SQL.

Existe una extensión para PHP, llamada PHP Data Objects (PDO), que ofrece funciones para facilitar la elaboración de declaraciones preparadas. Esto también te protegerá correctamente de este tipo de ataques, pero no es recomendado fiarte de las configuraciones predeterminadas y es mejor verificar que el código esté escrito correctamente de forma manual. De este modo, estarás 100% seguro de que funcionará la defensa contra inyecciones SQL.

Pentesting

Probar tu sistema de seguridad para buscar entradas que permitan hacer inyección SQL es una fase importante de la defensa de tu sistema. Si no haces ejercicios de pentesting, no puedes verificar si la inyección de código funciona o no.

Para saber cómo prevenir la inyección SQL, también te será muy útil aprender a ejecutar estos ataques tú mismo. Conocer el lenguaje SQL sería una gran ventaja para ti, a pesar de que existen herramientas que permitan automatizar este tipo de ciberataques. El problema con este tipo de softwares para pentesting, como SQLMap, es que generan muchas peticiones y, por ende, mucho ruido. Entonces, lo más probable es que los ciberatacantes usen sus propios softwares o dominen de primera mano el lenguaje de programación.

Entornos de práctica

El hacking ético de aplicaciones web es uno de los más útiles que puede aprender un pentester, ya que es uno de los servicios que más demanda tienen en el campo de la ciberseguridad. Para ello, existen entornos web de aprendizaje que permiten practicar los ciberataques más comunes para aplicaciones web. Algunos de los entornos de práctica de hacking web más conocidos son:

  • WebGoat, desarrollada en Java (J2EE).
  • DVWA, desarrollada en PHP.
  • DVNA, desarrollada en Node.js.

En estas páginas web con vulnerabilidades desarrollas a propósito, puedes practicar los diferentes tipos de ataques más comunes del mundo del hacking web, establecidos por el ranking de OWASP Top 10.

OWASP Top 10

En entornos de práctica como WebGoat (desarrollada por OWASP), DVWA y DVNA, podrás probar todas las vulnerabilidades incluidas en el ranking de OWASP Top 10, el cual establece cuáles son los diez ciberataques más comunes de la web y sirve como guía para ejecutar un pentesting de aplicaciones.

¿Cómo aprender más?

Ya has aprendido cómo prevenir la inyección SQL y cómo puedes practicar este ciberataque en ejercicios de pentesting. Si quieres aprender más y especializarte en ciberseguridad, únete a nuestro Ciberseguridad Full Stack Bootcamp y conviértete en un experto en pocos meses, ¡Matricúlate ya!

[email protected]

¿Sabías que hay más de 24.000 vacantes para especialistas en Ciberseguridad sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso!