¿Qué es un ataque de inyección SQL?
¿Cómo se convierte la entrada del usuario en un comando SQL?
Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.
Si un sitio web pega la entrada del usuario en una declaración SQL, el usuario puede ingresar sintaxis SQL en lugar de datos. Esta vulnerabilidad se llama inyección SQL.
Un ataque SQL común a menudo se refiere a la inyección SQL. Para ser precisos, los ataques a sistemas que utilizan SQL son un término más amplio y el ataque de entrada representativo es la inyección de SQL.
Problemas que surgen al combinar cadenas tal cual
Digamos que creó el código de inicio de sesión de la siguiente manera:
const sql =
"SELECT * FROM users WHERE name = '" + userName +
"' AND password = '" + password + "'";
Cuando se recibe una entrada normal, se crea el siguiente SQL.
SELECT * FROM users
WHERE name = 'rose' AND password = '1234';
Sin embargo, si se incluyen comillas y operadores SQL en la entrada del usuario, la estructura de la oración prevista por el desarrollador puede cambiar.
' OR 1=1 --
SELECT * FROM users
WHERE name = '' OR 1=1 -- ' AND password = '';
1=1siempre es cierto,--Esto último se puede comentar. Las cadenas que deberían haber sido tratadas sólo como datos se han convertido en parte de los comandos SQL.
¿Qué daño causa?
Aunque la inyección SQL es posible, no siempre se produce el mismo daño. Los resultados varían según el tipo de base de datos que esté ejecutando, los permisos de la cuenta y la variedad de declaraciones que se pueden ejecutar a la vez.
Aún así, en general, pueden ocurrir los siguientes problemas:
- Omita las comprobaciones de inicio de sesión.
- Leer la información personal de otros usuarios.
- Cambiar o eliminar publicaciones o información de la cuenta.
- Utilice mensajes de error para determinar la estructura de la base de datos.
- Si los permisos de la cuenta de la base de datos son demasiado altos, el alcance del daño se amplía.
La inspección inicial por sí sola no puede evitarlo.
Puede pensar que es seguro porque su navegador bloquea el ingreso de comillas. Sin embargo, un atacante puede enviar una solicitud HTTP directamente al servidor sin pasar por la pantalla del navegador.
Por lo tanto, los límites de longitud de entrada y la inspección de la pantalla son sólo ayudas para la usabilidad. La verdadera defensa debe realizarse en el servidor que ejecuta SQL.
La causa principal de la inyección SQL no es un único carácter especial. El problema fundamental es mezclar datos de usuario y comandos SQL en una sola cadena.