¿Qué es una inyección SQL y cómo se evita?

Inyección SQL · En inglés: SQL injection · Seguridad y legal

La respuesta corta

Es un ataque en el que alguien escribe órdenes maliciosas en un formulario para que la base de datos las ejecute y le entregue información o borre algo. Se evita construyendo el sistema para que lo que escribe el usuario siempre se trate como dato y nunca como orden.

Ana'; borrar todoEscriben en el formularioFiltrosolo pasa como datoLa base de datosa salvoLo que escribes es un nombre, nunca una orden
La inyección SQL es una orden escondida en un formulario: se evita tratando todo lo que se escribe como dato.
Explicado con calma

¿Qué es una inyección SQL?

SQL es el idioma con el que se le hacen preguntas a muchas bases de datos. En una inyección SQL, el atacante escribe en un campo de formulario, o en la dirección de una página, un pedazo de ese idioma disfrazado de dato, con la esperanza de que el sistema lo ejecute como una orden y le entregue información o borre algo.

La defensa principal es construir las consultas para que lo que escribe el usuario siempre se trate como dato y nunca como orden. Además sumamos filtros que bloquean el intento antes de que llegue al sitio.

Por qué le importa a tu negocio

Es uno de los ataques más conocidos contra sitios con base de datos, y un solo formulario mal hecho puede exponer los datos de tus clientes. Además del daño directo, una filtración de datos personales puede traer problemas con la ley de protección de datos.

Ejemplos

Lo mismo, en pequeño y en grande

En pequeño

El formulario de contacto de una veterinaria

Una veterinaria tiene un formulario donde la gente escribe su nombre. Un atacante, en vez de su nombre, escribe un pedacito de código disfrazado. Si el sistema está bien hecho, ese texto se guarda como un nombre raro y no pasa nada.

En grande

Una tienda con miles de clientes

Una tienda grande guarda datos de miles de clientes en su base de datos. Sus formularios y buscadores están hechos para tratar todo lo que escribe la gente como dato y, además, hay filtros que frenan el intento antes de llegar. Así un formulario descuidado no expone a nadie.

Dónde lo vas a ver

Cómo lo usamos en Damorus

La protección contra inyección SQL hace parte de la seguridad básica de todos nuestros planes, junto con Cloudflare. En la tienda no arma consultas SQL con el texto que escribe el cliente: habla con la base a través de Supabase y de funciones del servidor, y las reglas de Row Level Security limitan qué puede leer o escribir cada sesión.

Pregunta rápida

Pon a prueba lo que leíste

Elige A, B o C. Si fallas, lees el porqué y pruebas otra vez.

En un formulario alguien escribe una orden en lugar de su nombre. ¿Qué debería hacer un sistema bien hecho?

A jugar

Aprende jugando

Reto especial

Algo huele raro en la hoja

Siguiente en la ruta · paso 8 de 13¿Qué es Row Level Security (RLS) y cómo protege mis datos?

¿Conoces a alguien a quien le sirva esto?