IA y código: por qué los guardrails importan más que los prompts perfectos
Por qué la generación de código con IA necesita barreras estructurales, no solo mejores prompts
Todos hemos oído historias de errores de seguridad que dejan expuestos datos de otros clientes. Son fallos que preocupan a los auditores y que pueden acabar en multas o problemas legales. Lo más incómodo es que nadie busca que esto ocurra. Suele ser un simple descuido.
Con herramientas como Claude o GPT escribiendo miles de líneas de código cada día, estos riesgos se multiplican. Puedes añadir todas las instrucciones de seguridad que quieras en tus prompts. Puedes repetir “comprueba la autorización” hasta el cansancio. Sin embargo, cuando el modelo genera 16.000 líneas de código, surge una pregunta incómoda:
¿Cómo sabes realmente que el código hace lo que pretendías?
El problema de confiar solo en indicaciones
La mayoría de prácticas de seguridad en el desarrollo con IA se basan en pedirle al modelo que “se comporte bien”. Le dices: “valida siempre los permisos”, “nunca saltes la comprobación de entrada” o “usa la función compartida para verificar accesos”.
Esto funciona algunas veces. Suficiente para proyectos pequeños, pero no lo bastante fiable para entornos de producción.
El fallo está en que estas indicaciones dependen de que el modelo:
- Recuerde la regla en el momento oportuno
- Identifique dónde aplicarla
- No se deje llevar por atajos en el contexto local
- Mantenga la misma lógica en todo el proyecto
Y luego depende de que los revisores humanos hagan lo mismo. Con el volumen de código que generan los modelos actuales, es un método poco realista.
Barreras estructurales: que el código se proteja solo
Las barreras estructurales funcionan de forma distinta. Son restricciones que el propio sistema puede comprobar: compiladores, sistemas de tipos, analizadores estáticos y pruebas automatizadas.
La clave está en la palabra “rechazar”.
Cuando tienes una restricción estructural, el código no puede compilar ni pasar las pruebas si no cumple la regla. No tienes que pedirle al modelo que lo recuerde. No esperas que cumpla por buena voluntad. Proyectas tus requisitos críticos directamente en la estructura del código, de forma que las violaciones sean casi imposibles por accidente.
这也是“backpressure” resulta útil. No generas el código una vez y esperas que sea correcto. Crear un ciclo: el modelo intenta construir algo, recibe un error de la restricción estructural, lo usa como entrada y vuelve a intentar. Este loop continúa hasta que el código cumple las reglas.
La diferencia es entre una lista de comprobación y una puerta cerrada.
Trasladar las reglas al código
Una idea importante: las reglas que merece la vista مح保护are fácil de definir con precisión.
“Un usuario solo puede acceder a un recurso si está autenticado, forma parte del tenant y la resource pertenece al tenant.”
Esta regla es clara, limitada y sin ambigüedades.
Pero el inglés —or