
Última actualización: 11/9/2026
Un asistente que responde mal y un agente que ejecuta una acción indebida plantean riesgos distintos. Cuando una aplicación puede consultar información privada, emitir reembolsos o llamar a servicios externos, protegerla exige algo más que un buen prompt.
La decisión clave es separar lo que propone el modelo de lo que autoriza y ejecuta la aplicación. El modelo interpreta la solicitud; el backend comprueba identidad, permisos y reglas de negocio antes de producir efectos.
Esta guía está dirigida a desarrolladores que integran modelos de lenguaje con herramientas y datos empresariales. Presenta una arquitectura de referencia y ejemplos de sus controles, no una aplicación completa lista para producción.
Alcance temporal: publicada en noviembre de 2026 como preparación para 2027. Las recomendaciones se apoyan en documentación disponible al revisar el artículo; las versiones y herramientas pueden cambiar.
Conviene distinguir tres conceptos:
OWASP clasifica la inyección de prompts como LLM01:2025. Esa clasificación identifica un riesgo; no demuestra por sí sola qué porcentaje de aplicaciones es vulnerable.
Considera un asistente de soporte que resume un documento adjunto. Si el documento incluye una orden para aprobar un reembolso, esa orden debe seguir siendo contenido del documento. No puede convertirse en autorización para mover dinero.
Objetivo de diseño: reducir la probabilidad de que el modelo siga instrucciones maliciosas y limitar las consecuencias si llega a hacerlo.
![]()
Organiza el flujo en seis etapas:
El modelo no debe poder sustituir ninguno de esos controles mediante texto. Tampoco debe recibir credenciales con las que pueda saltarse el servicio de autorización.
Los ejemplos de Python usan Python 3.12 y Pydantic 2. Es una elección para esta guía, no una afirmación de que otras versiones sean incompatibles.
Instala únicamente lo necesario para los fragmentos:
La activación anterior corresponde a Bash. En PowerShell, utiliza el script de activación de la carpeta Scripts del entorno virtual.
Para las evaluaciones, la guía de inicio de Promptfoo indica Node.js 22.22.0 o posterior al momento de esta revisión. Comprueba ese requisito al configurar tu entorno.
Limita el tamaño de las solicitudes, los archivos, los resultados de herramientas y el contexto acumulado. Añade controles de frecuencia, tiempo de ejecución y consumo.
La normalización Unicode puede servir para detectar ciertas variantes de texto, pero no neutraliza una inyección. Eliminar indiscriminadamente caracteres invisibles también puede modificar idiomas, identificadores o código legítimo. Si normalizas para analizar, define qué transformaciones aceptas y conserva el original cuando sea necesario, con controles de acceso y retención.
Un filtro que detecta expresiones sospechosas es una señal adicional. No reemplaza los permisos ni las reglas de negocio.
Mantén las instrucciones de la aplicación en los mensajes reservados para ese fin. No insertes allí texto arbitrario del usuario, documentos recuperados ni resultados de navegación.
Identifica la procedencia del contenido externo y úsalo como evidencia. Un documento interno también puede contener errores o instrucciones introducidas por un tercero.
El formato JSON, las etiquetas XML y los delimitadores ayudan a organizar el contexto, pero no crean una barrera de seguridad. Del mismo modo, una etiqueta que diga “verificado” no concede permisos: esa clasificación debe proceder de controles del backend.
La documentación de seguridad para agentes de OpenAI recomienda separar las entradas no confiables y restringir los datos que pasan entre etapas. Estas medidas reducen el riesgo, sin eliminarlo.
Evita herramientas genéricas como execute_sql para un agente de soporte que solo necesita consultar pedidos o solicitar reembolsos. Expón operaciones específicas y valida sus argumentos en el servidor.
Este esquema representa una propuesta de reembolso:
El esquema rechaza campos adicionales, importes fuera del rango y tipos incorrectos. El límite de 100.000 unidades mínimas es ilustrativo y debe ajustarse al producto y la moneda.
Un JSON válido todavía puede solicitar una operación indebida. Este esquema no demuestra que el pedido pertenezca al usuario, que sea reembolsable ni que exista una aprobación.
La identidad, la organización, la moneda y el destino del dinero deben obtenerse de fuentes autorizadas del servidor. No los aceptes como hechos porque los haya generado el modelo.
El siguiente fragmento se añade al anterior. Ilustra comprobaciones sobre un pedido; no ejecuta el pago ni implementa el flujo de aprobación:
El servidor construye la identidad a partir de la sesión autenticada y carga el pedido desde su base de datos. No debe construir esos objetos copiando datos proporcionados por el modelo.
En una implementación real, el saldo reembolsable debe tener en cuenta devoluciones anteriores y operaciones pendientes. Antes de ejecutar, vuelve a comprobar el estado relevante bajo los controles de concurrencia apropiados.
Para pagos externos, utiliza las garantías de idempotencia del proveedor y registra el estado de la operación. Un reintento tras un timeout no debe generar un segundo reembolso.
Una respuesta del modelo que diga “el usuario confirmó” no demuestra consentimiento. La política del servidor determina cuándo hace falta una aprobación y quién puede concederla.
Para un reembolso sensible:
OWASP recomienda vincular la autorización a la transacción y verificarla en el servidor.
Un nonce es un valor que se utiliza una sola vez; no es sinónimo de hash criptográfico. Un token aleatorio o firmado puede formar parte del mecanismo, pero no sustituye la comprobación de identidad, la vinculación con la operación ni la protección contra reutilización.
Prueba la aplicación con sus permisos, contexto y herramientas. Evaluar únicamente el texto que devuelve el modelo deja fuera los efectos que más importan.
Para iniciar la configuración:
El asistente permite describir la aplicación, configurar el destino y seleccionar pruebas. Guarda la configuración generada como promptfooconfig.yaml y ejecuta:
Estos comandos siguen el flujo de inicio documentado de Promptfoo. Debes configurar un endpoint real, credenciales de prueba y criterios de evaluación adecuados a tu aplicación.
Utiliza un entorno de pruebas y datos sintéticos. Si la herramienta genera ataques o evalúa respuestas mediante proveedores externos, revisa qué información les envía y sus costes. En CI, fija la versión validada en lugar de depender permanentemente de latest.
Incluye, como mínimo, estos escenarios:
Comprueba el resultado en el backend: ninguna escritura indebida, ningún acceso cruzado y ninguna ejecución sin autorización. Un mensaje del asistente que diga “rechazado” no basta si la herramienta ya produjo el efecto.
Define los resultados esperados antes de ejecutar las pruebas:
Indica el conjunto de pruebas, el modelo, su versión y la configuración evaluada. Un porcentaje sin ese contexto no permite comparar sistemas ni prometer protección en producción.
Una arquitectura defensiva combina instrucciones claras, validaciones, permisos y pruebas. La pregunta decisiva para cada herramienta es: si el modelo propone una acción indebida, ¿qué control independiente impide que se ejecute?
Revisión editorial y técnica: 9 de noviembre de 2026.