Qué Es La Inyección SQL
Qué Es La Inyección SQL
SELECT * FROM users WHERE username = 'admin' -- ' AND password = ''
Esto comentaría la parte de la contraseña, permitiendo el acceso como administrador sin
conocer la contraseña real.
Caso práctico 2: Extracción de información
Escenario: Una página que muestra productos basados en una categoría seleccionada por el
usuario.
Código vulnerable:
sql
$query = "SELECT * FROM products WHERE category = '$category'";
Ataque: El atacante podría ingresar:
1' UNION SELECT username, password FROM users --
La consulta resultante sería:
sql
SELECT * FROM products WHERE category = '1' UNION SELECT username, password
FROM users --'
Esto permitiría al atacante obtener los nombres de usuario y contraseñas de la tabla de
usuarios.
Impacto y Consecuencias
Riesgos para la seguridad de los datos
1. Acceso no autorizado: Los atacantes pueden obtener acceso a datos sensibles,
incluyendo información personal de usuarios, datos financieros y secretos
comerciales (eSecurityPlanet, s.f.).
2. Modificación de datos: Los atacantes pueden alterar, insertar o eliminar registros en
la base de datos, comprometiendo la integridad de la información (eSecurityPlanet,
s.f.).
3. Escalada de privilegios: Un atacante podría elevar sus privilegios en el sistema,
potencialmente obteniendo acceso de administrador (eSecurityPlanet, s.f.).
4. Ejecución de comandos remotos: En algunos casos, los atacantes pueden ejecutar
comandos en el servidor, lo que podría llevar a un compromiso total del sistema
(eSecurityPlanet, s.f.).
Posibles daños a la organización
1. Pérdidas financieras: Desde costos directos por robo de información financiera hasta
gastos en mitigación y recuperación (eSecurityPlanet, s.f.).
2. Daño reputacional: La pérdida de confianza de los clientes y socios comerciales
puede tener efectos a largo plazo en la reputación de la empresa (eSecurityPlanet,
s.f.).
3. Consecuencias legales: Incumplimiento de regulaciones de protección de datos
como GDPR, lo que puede resultar en multas significativas (eSecurityPlanet, s.f.).
4. Interrupción del negocio: Los ataques pueden causar tiempo de inactividad en
sistemas críticos, afectando las operaciones comerciales (eSecurityPlanet, s.f.).
5. Espionaje industrial: Los competidores podrían obtener acceso a información
propietaria, afectando la ventaja competitiva de la organización (eSecurityPlanet,
s.f.).
Métodos de Prevención
1. Uso de consultas parametrizadas:
o Implementar consultas preparadas (prepared statements) con parámetros
vinculados (eSecurityPlanet, s.f.).
o Ejemplo en PHP:
php
Copy
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name
= :name');
$stmt->execute(array('name' => $name));
2. Validación y sanitización de entradas:
o Implementar una validación estricta de todas las entradas de usuario
(eSecurityPlanet, s.f.).
o Utilizar listas blancas para caracteres permitidos.
o Ejemplo:
php
Copy
$input = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
3. Uso de ORM (Object-Relational Mapping):
o Utilizar frameworks ORM que manejan automáticamente la sanitización de
consultas (eSecurityPlanet, s.f.).
4. Principio de menor privilegio:
o Asignar a las cuentas de base de datos solo los permisos mínimos necesarios
(eSecurityPlanet, s.f.).
o Utilizar diferentes cuentas para diferentes funciones de la aplicación.
5. Implementación de WAF (Web Application Firewall):
o Utilizar un WAF para detectar y bloquear patrones de ataque conocidos
(eSecurityPlanet, s.f.).
6. Escape de caracteres especiales:
o Utilizar funciones de escape específicas del sistema de base de datos
(eSecurityPlanet, s.f.).
o Ejemplo en MySQL:
php
Copy
$name = $mysqli->real_escape_string($name);
7. Manejo de errores:
o Evitar mostrar mensajes de error detallados que puedan revelar información
sobre la estructura de la base de datos (eSecurityPlanet, s.f.).
8. Actualizaciones y parches:
o Mantener actualizados todos los sistemas, frameworks y bibliotecas
utilizadas en la aplicación (eSecurityPlanet, s.f.)
9. Auditorías de seguridad regulares:
o Realizar pruebas de penetración y revisiones de código para identificar
vulnerabilidades (eSecurityPlanet, s.f.).
10. Educación y concientización:
o Capacitar a los desarrolladores en prácticas de codificación segura y
concienciar sobre los riesgos de la inyección SQL (eSecurityPlanet, s.f.).
Implementando estas medidas de prevención, las organizaciones pueden reducir
significativamente el riesgo de ataques de inyección SQL y proteger sus datos y sistemas
críticos.
Referencias
Ciberseguridad.com. (s.f.). Inyección SQL. Recuperado el 23 de junio de 2024, de
https://ciberseguridad.com/amenzas/vulnerabilidades/inyeccion-sql/
#1_Inyeccion_SQL_basada_en_la_union
eSecurityPlanet. (s.f.). How to Prevent SQL Injection Attacks. Recuperado el 23 de junio
de 2024, de https://www.esecurityplanet.com/threats/how-to-prevent-sql-injection-attacks/
OpenWebinars. (2017, 12 de octubre). ¿Qué es SQL Injection?
https://openwebinars.net/blog/que-es-sql-injection/
OWASP. (2021). A03:2021 – Injection. https://owasp.org/Top10/A03_2021-Injection/
OWASP. (s.f.). SQL Injection Prevention Cheat Sheet.
https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.ht
ml
PHP. (s.f.). SQL Injection. https://www.php.net/manual/es/security.database.sql-
injection.php
Sucuri. (2022). Understanding Website SQL Injections.
https://blog.sucuri.net/2022/01/understanding-website-sql-injections.html