¿Qué es una inyección SQL? [MakeUseOf explica]

  • Joseph Goodman
  • 0
  • 2681
  • 385
Anuncio

El mundo de la seguridad en Internet está plagado de puertos abiertos, puertas traseras, agujeros de seguridad, troyanos, gusanos, vulnerabilidades de firewall y una serie de otros problemas que nos mantienen alerta todos los días. Para los usuarios privados, los virus y los gusanos parecen ser la peor de las posibilidades. Pero para cualquiera que ejecute una base de datos, la inyección SQL es uno de los defectos de seguridad más destructivos que existen..

Las bases de datos son extremadamente valiosas en el ámbito de las computadoras. Son esenciales para almacenar datos como memoria y mostrar las diversas relaciones entre puntos de datos. Aquí en MakeUseOf, tenemos numerosas bases de datos dedicadas a diversas tareas: una para todos nuestros artículos, una para nuestra base de usuarios, otra para nuestro programa de Recompensas, y la lista continúa. ¿Qué sucede cuando nuestras bases de datos son atacadas maliciosamente o incluso destruidas??

Cuando no tiene acceso real a una base de datos, la inyección SQL es una de las formas de ataque más destacadas. Sigue leyendo para saber qué es exactamente y cómo puede ser tan peligroso.

¿Qué es SQL??

Para comprender la inyección SQL, primero debe comprender qué es SQL y cómo se relaciona con un sitio web. SQL, que significa lenguaje de consulta estructurado, es un tipo de lenguaje de programación optimizado para administrar datos tabulares. Para todos los efectos, es solo una forma para que los programadores se comuniquen con una base de datos y le den comandos.

Cada vez que se actúa sobre una base de datos, se dan y procesan comandos SQL. Si piensa en todas las veces que se está actuando sobre una base de datos, concluirá que solo sucede en un puñado de circunstancias:

  • Cuando es necesario insertar nuevos datos,
  • Cuando los datos actuales necesitan ser cambiados,
  • Cuando los datos antiguos deben eliminarse,
  • Cuando se necesita buscar y recuperar un dato en particular.

Cada vez que se necesita una de estas acciones, se ejecuta un comando SQL en algún lugar del servidor. En su mayor parte, el programador determina cuándo y dónde se producen estos comandos SQL en el código fuente. Sin embargo, hay circunstancias inevitables en las que un usuario puede forzar la manipulación de una base de datos, y esas oportunidades están a su alrededor..

¿Alguna vez has iniciado sesión en un sitio web? ¿Alguna vez ha publicado un comentario en un artículo de blog o una respuesta en un hilo del foro? ¿Alguna vez envió un mensaje de Facebook a un amigo? ¿Escribiste un correo electrónico en Gmail? ¿Buscaste un sitio web en Google? Cada vez que ve un campo de entrada en un sitio web (nombre de usuario, contraseña, consulta de búsqueda, cuadro de mensaje, etc.), ese texto se envía a la base de datos y se actúa sobre él..

Ahora, si un usuario malintencionado quería alterar una base de datos, no hay muchas opciones para él. Una posibilidad sería ganar físico acceder al servidor y destruirlo en su base. Pero, de lo contrario, tiene más sentido que el usuario malintencionado secuestre un comando SQL existente cuando usa un campo de entrada, lo que obliga al servidor a ejecutar un comando diferente del que se pretendía originalmente.

La técnica de inyección SQL

Este acto de secuestro de un comando SQL existente es a lo que se refiere la inyección SQL. ¿Por qué se llama inyección? Debido a que el secuestro de un comando SQL requiere que el usuario inyecte su propio código SQL cuando usa un campo de entrada. ¿Suena confuso? Déjame ilustrar con un ejemplo.

Considere la página de inicio de sesión de MakeUseOf. Cuando ingresas tu nombre de usuario y contraseña y presionas “Enviar“, está obligando al servidor web a generar un comando SQL que involucra la información que acaba de proporcionar, es decir, su nombre de usuario y contraseña. La base de datos recibe la información, verifica que la combinación de nombre de usuario / contraseña es correcta, luego le brinda el acceso adecuado a otras áreas del sitio.

Ahora imagine lo que sucedería si un usuario malintencionado no ingresara su nombre de usuario y contraseña, sino que escribiera un comando SQL como nombre de usuario. Si el código del servidor no está correctamente protegido, la base de datos recibirá el nombre de usuario defectuoso (que en realidad es un comando SQL) y lo ejecutará como un comando.

Y es por eso que se llama inyección. El comando SQL se inyecta en la base de datos a través de medios completamente legítimos, manipulándolo de tal manera que termine haciendo algo que no estaba destinado a hacer..

Un ejemplo avanzado

Hasta ahora, he descrito la inyección SQL en términos de alto nivel para que cualquiera pueda entender, incluso aquellos sin conocimientos de programación. En esta sección, voy a dar un ejemplo real de cómo Esta técnica es posible. Si eres un novato en SQL, o si nunca antes te has ocupado de la programación, puedes saltear esta sección en silencio.

Al iniciar sesión en un sitio web, aquí hay una forma posible de que el código se pueda escribir en SQL:

SELECCIONE user_id
DE usuarios_db
DONDE nombre de usuario = "$ nombre de usuario" Y contraseña = "$ contraseña"

Básicamente, el comando le pide a la base de datos que devuelva todos ID_usuario de la mesa users_db que coinciden con la combinación de nombre de usuario y contraseña ingresados. Se ve bien y elegante, ¿verdad??

Supongamos que el formulario de inicio de sesión recibió las siguientes entradas:

Nombre de usuario: David
Contraseña: fubar 'OR' x '=' x

Tenga en cuenta que el campo de contraseña no comienza o termina con un apóstrofe. Cuando el servidor recibe este intento de inicio de sesión, tomará todo lo proporcionado en el campo de contraseña y lo colocará en lugar de la contraseña $ en el código. El comando SQL resultante se verá así:

SELECCIONE user_id
DE usuarios_db
DONDE nombre de usuario = "David" Y contraseña = 'fubar 'OR' x '=' x'

Cuando el servidor ejecuta este comando, la última parte de ese comando SQL siempre volver verdadero. Esto significa que el usuario malintencionado podría ingresar cualquier nombre de usuario y obtener acceso instantáneo a esa cuenta porque el inicio de sesión funcionaría independientemente de si obtuvo la contraseña correcta.

Por supuesto, iniciar sesión en la cuenta de alguien es un delito leve cuando lo comparas con todos los otros posibles intentos de pirateo: eliminar bases de datos enteras, acumular todos los datos o incluso robando los datos en las bases de datos.

Los desarrolladores web profesionales están mejorando cada vez más en la prevención de tales trucos, pero de vez en cuando escuchará que una compañía sufrió pérdidas a manos de un ataque de inyección SQL. Cuando sucede, ahora sabes lo que significa y cómo es posible.

Crédito de imagen: imagen de introducción a través de Shutterstock, esquema de base de datos a través de Shutterstock, hackeado a través de Shutterstock




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.