¿Qué es una inyección SQL? [MakeUseOf explica]
El mundo de la seguridad en Internet está plagado de puertos abiertos, puertas traseras, agujeros de seguridad, troyanos, gusanos, vulnerabilidades de cortafuegos y una serie de otros problemas que nos mantienen a todos en alerta todos los días. Para los usuarios privados, los virus y los gusanos parecen ser las peores posibilidades. Pero para cualquiera que esté ejecutando una base de datos, la inyección de 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 los puntos de datos. Aquí en MakeUseOf, tenemos numerosas bases de datos dedicadas a varias 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 de SQL es una de las formas más prominentes de ataque. Sigue leyendo para saber qué es exactamente y cómo puede ser tan peligroso..
Qué es SQL, de todos modos?
Para comprender la inyección de 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 propósitos, es solo una forma para que los programadores se comuniquen con una base de datos y le den comandos..
Cuando se actúa sobre una base de datos, se dan y procesan comandos SQL. Si piensa en todas las ocasiones en que se actúa sobre una base de datos, llegará a la conclusión de que solo sucede en un puñado de circunstancias:
- Cuando hay que insertar nuevos datos,
- Cuando los datos actuales necesitan ser cambiados,
- Cuando los datos antiguos necesitan ser borrados,
- Cuando se necesita buscar y recuperar un dato en particular.
Cada vez que una de estas acciones debe ocurrir, se ejecuta un comando SQL en algún lugar de un servidor. En su mayor parte, el programador puede determinar cuándo y dónde se producen estos comandos SQL en el código fuente. Sin embargo, existen circunstancias inevitables en las que un usuario puede forzar la manipulación de una base de datos, y esas oportunidades están a tu 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 has enviado un mensaje de Facebook a un amigo? Escribió un correo electrónico en Gmail? ¿Buscas un sitio web en Google? Cada vez que vea 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 ejecuta.
Ahora, si un usuario malintencionado quería manipular una base de datos, no hay muchas opciones para él. Una posibilidad sería ganar dinero real. físico Accede al servidor y destrúyelo en su base. Pero de lo contrario, lo más sensato es 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 al que estaba originalmente previsto..
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 de 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 utiliza un campo de entrada. ¿Eso 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 involucre 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 y contraseña sea 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 su nombre de usuario. Si el código del servidor no está asegurado correctamente, la base de datos recibirá el nombre de usuario defectuoso (que en realidad es un comando SQL) y lo ejecutará como un comando.
Y por eso se llama inyección. El comando SQL se inyecta en la base de datos por medios totalmente 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 de 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 habías lidiado con la programación, puedes omitir esta sección..
Al iniciar sesión en un sitio web, aquí hay una forma posible de que el código se escriba en SQL:
SELECCIONAR ID_usuario
FROM users_db
DONDE username = "$ username" Y contraseña = "$ password"
Básicamente, el comando le pide a la base de datos que devuelva todos user_ids de la mesa usuarios_db que coinciden con la combinación de nombre de usuario y contraseña introducida. Se ve todo bien y dandy, a la derecha.?
Supongamos que al formulario de inicio de sesión se le dieron las siguientes entradas:
Nombre de usuario: David
Contraseña: fubar 'OR' x '=' x
Observe que el campo de contraseña no comienza ni termina con un apóstrofe. Cuando el servidor recibe este intento de inicio de sesión, tomará todo lo que figura en el campo de la contraseña y lo colocará en lugar de la contraseña de $ en el código. El comando SQL resultante se verá así:
SELECCIONAR ID_usuario
FROM users_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 a esa cuenta de manera instantánea, ya que el inicio de sesión funcionaría si la contraseña es correcta o no..
Por supuesto, iniciar sesión en la cuenta de alguien es una ofensa bastante leve cuando lo comparas con todos los otros posibles intentos de pirateo: eliminar bases de datos completas, destruir 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 empresa sufrió una pérdida a manos de un ataque de inyección SQL. Cuando sucede, ahora sabes lo que significa y cómo es posible..
Crédito de la imagen: imagen de introducción a través de Shutterstock, esquema de base de datos a través de Shutterstock, HACKED a través de Shutterstock