Inyecciones: separar una instrucción de los datos
El único principio
El motor debe recibir el comando y los datos por separado. Consultas parametrizadas, comandos del sistema con un array de argumentos, y motores de plantillas que marcan el contenido inseguro. Filtrar cadenas es una carrera que siempre se pierde.
Dónde aparece
Bases de datos, comandos del sistema operativo, consultas a bibliotecas, llamadas a motores de búsqueda, y también en direcciones construidas dinámicamente. Y sí: también en indicaciones a un modelo de lenguaje, donde el contenido externo puede interpretarse como una instrucción.
Defensa en profundidad
Permisos mínimos para el usuario de la base de datos, para que incluso si algo pasó, el daño esté limitado. Y validación de la entrada contra un esquema: no como sustituto de la separación, sino como capa adicional que bloquea la entrada absurda desde el principio.
En profundidad
Ejecuta pruebas automáticas que alimenten entrada inusual en cada campo: caracteres especiales, longitud extrema, distintas codificaciones, y comprueba que la respuesta es un error ordenado y no un comportamiento anómalo. Eso atrapa también fallos ordinarios, no solo vulnerabilidades.