Diferencia entre revisiones de «SQL»

246 bytes añadidos ,  28 oct 2025
Adicion de informacion, protocolo de respuesta, ejemplo de errores y referencias. Nota: La corrección de puntuacion esta hecho por IA
Sin resumen de edición
(Adicion de informacion, protocolo de respuesta, ejemplo de errores y referencias. Nota: La corrección de puntuacion esta hecho por IA)
Línea 118: Línea 118:
' OR '1'='1
' OR '1'='1
</pre>
</pre>
*Si* esta cadena se concatena en una consulta de autenticación sin protección, la condición lógica puede resultar siempre verdadera y permitir acceso no autorizado. Este ejemplo se usa para ilustrar el concepto; la exposición real siempre depende del contexto de la consulta y del tratamiento que haga la aplicación de la entrada.
*Si esta cadena se concatena en una consulta de autenticación sin protección, la condición lógica puede resultar siempre verdadera y permitir acceso no autorizado. Este ejemplo se usa para ilustrar el concepto; la exposición real siempre depende del contexto de la consulta y del tratamiento que haga la aplicación de la entrada.


=== Tipos comunes de inyección (visión general) ===
=== Tipos comunes de inyección (visión general) ===
Línea 144: Línea 144:


=== Prevención y mitigación (prácticas recomendadas) ===
=== Prevención y mitigación (prácticas recomendadas) ===
 
1. Mantener separación entre código y datos
# Mantener separación entre código y datos
* '''Consultas preparadas / parámetros enlazados''' (prepared statements): la forma más efectiva de evitar que la entrada del usuario sea interpretada como código SQL.
* '''Consultas preparadas / parámetros enlazados''' (prepared statements): la forma más efectiva de evitar que la entrada del usuario sea interpretada como código SQL.
Ejemplo en PHP (PDO):
Ejemplo en PHP (PDO):
Línea 157: Línea 156:
<pre style="color: blue">
<pre style="color: blue">
cur.execute("SELECT * FROM usuarios WHERE correo = %s AND contraseña = %s", (correo, hash))
cur.execute("SELECT * FROM usuarios WHERE correo = %s AND contraseña = %s", (correo, hash))
</pre>
</pre>2. Validación y saneamiento
 
# Validación y saneamiento
* Validar tipo, longitud, formato (ej. emails, números, fechas) antes de procesar.
* Validar tipo, longitud, formato (ej. emails, números, fechas) antes de procesar.
* Rechazar o normalizar entradas inesperadas.
* Rechazar o normalizar entradas inesperadas.
* Evitar la construcción dinámica de SQL con concatenación de strings.
* Evitar la construcción dinámica de SQL con concatenación de strings.


# Principio de menor privilegio
 
3. Principio de menor privilegio
* La cuenta que usa la aplicación para conectarse debe tener permisos mínimos (por ejemplo SELECT/INSERT/UPDATE en tablas necesarias, sin DROP ni DDL excesivo).
* La cuenta que usa la aplicación para conectarse debe tener permisos mínimos (por ejemplo SELECT/INSERT/UPDATE en tablas necesarias, sin DROP ni DDL excesivo).


# Uso de ORMs con cuidado
 
4. Uso de ORMs con cuidado
* Los ORMs suelen parametrizar consultas correctamente, pero el uso de consultas «raw» o concatenadas puede introducir riesgos. Revisar y auditar el código que construye SQL manualmente.
* Los ORMs suelen parametrizar consultas correctamente, pero el uso de consultas «raw» o concatenadas puede introducir riesgos. Revisar y auditar el código que construye SQL manualmente.


# Manejo seguro de errores y mensajes
 
5. Manejo seguro de errores y mensajes
* No mostrar trazas o errores SQL al usuario. Registrar internamente la información suficiente para investigar sin exponer estructura ni datos.
* No mostrar trazas o errores SQL al usuario. Registrar internamente la información suficiente para investigar sin exponer estructura ni datos.


# Registro, monitoreo y respuesta
 
6. Registro, monitoreo y respuesta
* Implementar alertas ante patrones sospechosos (picos de errores, inputs raros).
* Implementar alertas ante patrones sospechosos (picos de errores, inputs raros).
* Mantener logs de consultas y accesos para análisis forense.
* Mantener logs de consultas y accesos para análisis forense.


# Controles adicionales
 
7. Controles adicionales
* Web Application Firewall (WAF) como capa adicional — útil pero no sustituye buenas prácticas de codificación.
* Web Application Firewall (WAF) como capa adicional — útil pero no sustituye buenas prácticas de codificación.
* Hardening y parches de la BD y del servidor de aplicaciones.
* Hardening y parches de la BD y del servidor de aplicaciones.
Línea 184: Línea 186:
=== Ejemplos de corrección (antes / después) ===
=== Ejemplos de corrección (antes / después) ===


*Código vulnerable (no usar):*
*Código vulnerable (no usar):
<pre style="color: red">
<pre style="color: red">
$sql = "SELECT * FROM usuarios WHERE correo = '" . $_POST['correo'] . "' AND contraseña = '" . $_POST['pass'] . "'";
$sql = "SELECT * FROM usuarios WHERE correo = '" . $_POST['correo'] . "' AND contraseña = '" . $_POST['pass'] . "'";
</pre>
</pre>


*Corrección con prepared statement (recomendada):*
*Corrección con prepared statement (recomendada):
<pre style="color: blue">
<pre style="color: blue">
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE correo = :correo AND contraseña = :pass");
$stmt = $pdo->prepare("SELECT * FROM usuarios WHERE correo = :correo AND contraseña = :pass");
Línea 199: Línea 201:
=== Respuesta ante un incidente ===
=== Respuesta ante un incidente ===
1. Contener: desactivar vectores afectados (ej. endpoints vulnerables), cambiar credenciales si fuera necesario.
1. Contener: desactivar vectores afectados (ej. endpoints vulnerables), cambiar credenciales si fuera necesario.
2. Analizar logs para identificar alcance y vectores.
2. Analizar logs para identificar alcance y vectores.
3. Restaurar desde backups conocidas si hay pérdida o corrupción de datos.
3. Restaurar desde backups conocidas si hay pérdida o corrupción de datos.
4. Corregir la vulnerabilidad (parche, refactorización de consultas) y ejecutar pruebas.
4. Corregir la vulnerabilidad (parche, refactorización de consultas) y ejecutar pruebas.
5. Notificar a las partes afectadas según normativa/Política de divulgación y cumplimiento legal.
5. Notificar a las partes afectadas según normativa/Política de divulgación y cumplimiento legal.


Línea 211: Línea 217:
* Aprender SQL es clave para desarrollar con seguridad: entender cómo se construyen consultas permite tanto optimizar rendimiento como prevenir fallos de seguridad.
* Aprender SQL es clave para desarrollar con seguridad: entender cómo se construyen consultas permite tanto optimizar rendimiento como prevenir fallos de seguridad.
* Revisar siempre los puntos del código que generan SQL dinámico y tratarlos como zonas críticas de seguridad.
* Revisar siempre los puntos del código que generan SQL dinámico y tratarlos como zonas críticas de seguridad.
== Bibliografía ==
[https://pedrobeltrancanessa-biblioteca.weebly.com/uploads/1/2/4/0/12405072/fundamentos_de_sql_3edi_oppel.pdf Fundamentos de SQL - Andy Oppel Robert Sheldon]
[https://es.wikipedia.org/wiki/MySQL MySQL - Wikipedia]


[[index.php?title=Categoría:Bases de datos]]
[[index.php?title=Categoría:Bases de datos]]
14

ediciones