Respuesta directa
En pocas palabras
La salida de un modelo debe tratarse como entrada no confiable para el siguiente componente. Antes de mostrarla, guardarla o ejecutarla, define el contrato del consumidor, exige un esquema cerrado, valida tipos y significado, autoriza recursos y efectos, y aplica codificación específica para HTML, URL, cabeceras, correo o logs. SQL y comandos no se construyen con texto generado: usa consultas parametrizadas y herramientas estrechas. Las acciones materiales requieren aprobación y la prueba debe confirmar el estado final, no solo la respuesta del modelo.
Trata la salida del modelo como entrada no confiable
Una respuesta generada no conserva automáticamente la intención, los permisos ni el formato que espera el siguiente sistema. Puede incluir texto inducido por prompt injection, datos de otra fuente, marcado activo, una ruta peligrosa o argumentos que cambian el efecto. OWASP denomina improper output handling a la validación, sanitización o tratamiento insuficientes antes de pasar una salida del modelo a otro componente.
Dibuja la cadena completa: modelo, parser, aplicación, navegador, base de datos, API, filesystem, correo, CRM, herramienta y persona. En cada salto, la salida anterior se convierte en entrada nueva y debe cruzar su propio contrato. La confianza no aumenta porque el contenido venga en JSON, tenga una explicación convincente o haya sido revisado por otro modelo. El control corresponde al componente que conoce el contexto de uso y puede rechazar el efecto.
Inventa consumidores, intérpretes y efectos downstream
Registra dónde termina cada salida: texto plano, componente UI, Markdown, editor enriquecido, PDF, DOCX, CSV, hoja de cálculo, plantilla de correo, campo CRM, log, métrica, URL, webhook, consulta, file path, script o llamada de herramienta. Añade owner, formato, parser, privilegio, audiencia, datos, efecto, reversibilidad y manejo de errores. Incluye exportaciones, previsualizaciones, procesos batch y conectores de terceros.
Busca interpretación encadenada. Un borrador puede guardarse como Markdown, renderizarse a HTML, exportarse a PDF y enviarse por correo. Una cadena neutral en el primer paso puede adquirir semántica activa después. Conserva el tipo y la procedencia durante transformaciones; no conviertas todo a string. Identifica dónde datos y control comparten el mismo canal y sustituye concatenación por APIs estructuradas. El inventario debe mostrar quién puede producir el resultado y quién finalmente soporta el impacto.
Usa contratos y esquemas cerrados en lugar de texto libre
Cuando una salida alimenta código, solicita un objeto tipado con versión, campos obligatorios, enumeraciones, longitudes y límites. Rechaza propiedades adicionales, tipos implícitos, null inesperado y formatos ambiguos. Valida con una biblioteca independiente del modelo. La respuesta que no cumple el contrato no se repara silenciosamente para continuar: se rechaza, se reintenta bajo límite o se deriva a una ruta segura.
Un esquema válido solo demuestra forma. Añade validación semántica: pertenencia del recurso, moneda, zona horaria, estado, relación entre campos, rango comercial, catálogo vigente y conflicto de fuentes. Reconstruye valores críticos desde sistemas autorizados. No aceptes tenant_id, owner, rol o aprobación porque aparecen en la salida. Registra la versión del contrato y bloquea productores o consumidores incompatibles durante rollout.
Separa datos, metadatos y control en cada interfaz
MITRE CWE-116 describe el riesgo de preparar un mensaje estructurado sin codificar o escapar correctamente, permitiendo que datos se interpreten como control. Evita construir protocolos mediante concatenación. Usa parámetros, objetos, builders, APIs tipadas y funciones que mantienen separados comando y argumento. Una allowlist define operaciones y campos; el modelo elige entre opciones autorizadas, no redacta una instrucción arbitraria para el intérprete.
Normaliza antes de comparar y valida después de decodificar. Rechaza caracteres de control, delimitadores múltiples, encoding mezclado y representaciones alternativas cuando el consumidor no las necesita. No uses una denylist de palabras o símbolos como control principal. Si un formato admite contenido activo por requisito, procesa un subconjunto explícito con parser probado y vuelve a serializar desde la estructura permitida.
Renderiza HTML, Markdown y texto enriquecido sin ejecutar contenido
Muestra texto como texto por defecto. En React y otros frameworks conserva el escaping automático; no uses rutas equivalentes a innerHTML con una salida generada. Si el producto necesita Markdown o HTML limitado, parsea con una librería mantenida, elimina elementos y atributos no permitidos, bloquea URLs y esquemas peligrosos y sanitiza el DOM resultante. Aplica Content Security Policy como defensa adicional, no como sustituto del encoding.
Codifica según contexto: nodo HTML, atributo, JavaScript, CSS y URL requieren reglas distintas. Controla enlaces, imágenes remotas, data URLs, iframes, SVG, eventos, formularios y target. Las previsualizaciones usan el mismo pipeline que producción. Prueba navegadores, clientes de correo, exportaciones y lectores de documentos: un payload inerte en la pantalla principal puede activarse en otro renderizador.
| Criterio | Tratamiento seguro | Patrón peligroso |
|---|---|---|
| Interfaz web | Texto escapado o HTML limitado sanitizado | Insertar respuesta como HTML |
| Base de datos | Consulta fija con parámetros | Ejecutar SQL generado |
| Sistema operativo | API o job con argumentos tipados | Pasar texto a shell o eval |
| Correo | Plantilla controlada y campos codificados | Usar HTML completo generado |
No ejecutes SQL generado; usa consultas parametrizadas y operaciones permitidas
El modelo puede seleccionar una intención como consultar oportunidades activas, pero la aplicación debe traducirla a una consulta preparada y conocida. Los valores van como parámetros; tablas, columnas, operadores y límites proceden de una allowlist o de código versionado. Aplica identidad de base con privilegio mínimo, filtro de tenant, timeout, límite de filas y transacción de solo lectura cuando corresponda.
Si un caso analítico necesita lenguaje flexible, ejecútalo sobre una réplica o dataset aislado, con esquema reducido, cuenta sin escritura, costo limitado y revisión. Parsear una cadena SQL y buscar palabras peligrosas no demuestra seguridad. Confirma el plan y la operación efectiva. Las mutaciones usan endpoints específicos, precondiciones, idempotencia y autorización por recurso; una sentencia bien formada no concede derecho a cambiar el CRM.
Sustituye shell, eval y rutas libres por APIs estrechas
No pases una salida del modelo a exec, eval, un intérprete, notebook, plantilla con ejecución o shell. Encapsula cada necesidad en una función versionada con argumentos tipados y valores permitidos. Ejecuta bajo identidad separada, sandbox, límites de CPU, memoria y tiempo, filesystem mínimo y red controlada. La aplicación decide el binario o job; el modelo no compone la línea de comandos.
Para archivos, genera identificadores internos y nombres del lado servidor. Resuelve la ruta canónica, exige que permanezca dentro del directorio autorizado, bloquea traversal, enlaces y extensiones no admitidas, y evita sobrescrituras. Valida tipo real y tamaño. Un nombre legible puede guardarse como metadato, no como autoridad sobre el path. Analiza documentos en aislamiento y no abras automáticamente el resultado con privilegios del usuario.
Valida llamadas a APIs y herramientas en el punto del efecto
Una llamada estructurada incluye herramienta, versión, recurso, verbo, argumentos y destino. El policy enforcement point deriva usuario, workload y tenant del contexto autenticado, comprueba finalidad, permisos, cuota y aprobación, y vuelve a leer el estado justo antes del uso. Rechaza campos adicionales, URLs fuera de allowlist, IDs ajenos, cambios de versión, replays y alias. El servicio destino vuelve a autorizar.
No confíes en el mensaje success generado por el modelo. Comprueba status, esquema, firma o identidad del proveedor, idempotency key y cambio observado. Limita reintentos y efectos acumulados. Una herramienta que falla no autoriza usar otra más poderosa como fallback. Conserva circuit breaker y kill switch para detener llamadas nuevas, colas y trabajos en curso sin perder el proceso manual.
Controla plantillas de correo, documentos y hojas de cálculo
Mantén asunto, remitente, destinatarios, enlaces, adjuntos y estructura de la plantilla bajo control de la aplicación. La IA puede proponer texto para campos definidos; codifica cada campo y vuelve a validar después de renderizar. Bloquea formularios, scripts, píxeles y destinos no aprobados. Muestra la versión final a la persona que aprueba, no solo el texto fuente. Un preview seguro debe usar el mismo motor que el envío.
En PDF y DOCX, controla enlaces, objetos incrustados, macros, fuentes y metadatos. En CSV y hojas de cálculo, neutraliza fórmulas y prefijos que el cliente pueda ejecutar; define delimitador, charset y columnas. No permitas que una celda generada cambie la estructura o provoque una llamada externa al abrir el archivo. Escanea la exportación final y conserva hash, plantilla, versión y aprobación.
No guardes una inferencia como hecho del CRM
Clasifica la salida antes de persistir: cita, extracción, cálculo, inferencia, recomendación o borrador. Conserva fuentes, tiempo, versión y confianza apropiada. Los campos de sistema —precio, moneda, etapa, owner, consentimiento, pago, aceptación— se obtienen o modifican mediante reglas autorizadas, no porque el modelo los afirme. Si falta evidencia o existe conflicto, guarda un pendiente para revisión en lugar de completar el dato.
Separa texto generado de notas humanas y hechos verificados. Permite corregir, retirar y rastrear derivados. Una corrección no debe desaparecer al regenerar el resumen. Evalúa qué consumidores reutilizan el campo en forecast, automatizaciones, reportes o Buyer Room; una etiqueta visible en una pantalla puede perderse en una exportación y transformarse en certeza. Define contrato y procedencia también para downstream analítico.
Filtra datos, secretos y cruces de tenant antes de entregar la salida
Compara audiencia, finalidad y permisos con el contenido final. Detecta secretos, tokens, datos sensibles, identificadores ajenos y fragmentos de otra organización. La autorización debe haber actuado antes de recuperar, pero el control de salida limita propagación cuando una capa anterior falla. Redacta o bloquea según una política explícita; no envíes el texto completo a un servicio adicional sin evaluar finalidad, región y retención.
No registres la salida completa por comodidad. Usa hashes, referencias, campos permitidos y muestras controladas. Protege colas, cachés, traces, feedback y tickets de soporte, porque también son consumidores. Una pantalla que oculta un secreto no lo elimina del HTML, API o log. Prueba descargas, copiar y pegar, búsquedas, exportaciones y restauraciones.
Pide aprobación sobre el artefacto final y ofrece un fallback seguro
Para efectos materiales, la persona revisa el resultado exacto que será enviado o guardado: destinatario, recurso, diferencias, datos, precio, moneda, enlaces, adjuntos y consecuencia. La aprobación se vincula al hash o a los argumentos finales y vence si cambia el render, el destino o la versión. La interfaz permite editar, rechazar, pedir fuentes y continuar manualmente.
Cuando la validación falla, bloquea, degrada a texto plano, guarda como borrador o solicita información; no elimines caracteres hasta producir algo que pase. Limita reintentos para evitar consumo y variaciones que eludan controles. Un error de parser no debe caer en una ruta sin validación. Mide bloqueos legítimos para mejorar usabilidad sin aflojar silenciosamente el contrato.
Prueba cada consumidor y verifica el estado downstream
Crea casos para HTML, atributos, URLs, Markdown, correo, CSV, fórmulas, SQL, paths, cabeceras, logs, APIs y herramientas. Incluye encoding doble, Unicode, delimitadores, contenido grande, esquema incompleto, campos extra, otro tenant, permiso revocado, replay y respuesta de proveedor manipulada. Prueba también resultados legítimos complejos para detectar sobrebloqueo. Ejecuta la suite cuando cambian modelo, prompt, parser, librería, plantilla o consumidor.
Verifica el efecto real: DOM resultante, consulta preparada, archivo canónico, mensaje final, registro CRM, llamada de API, cola y log. Una negativa textual no basta si el componente ya interpretó el payload. Registra productor, consumidor, contrato, decisión, codificador, aprobación, resultado y error sin copiar secretos. Alerta por rechazos, campos desconocidos, destinos nuevos, cambios de formato, intentos repetidos y saltos de consumidor.
Gobierna contratos de salida y conserva los límites públicos de Cerravi
Asigna owner a cada contrato, parser, codificador, plantilla y consumidor. Versiona cambios, prueba compatibilidad, despliega con canary y conserva rollback. Reabre la revisión cuando una salida llega a un canal nuevo o adquiere más autoridad. NIST SSDF recomienda integrar prácticas de desarrollo seguro para reducir vulnerabilidades y sus causas durante el ciclo de vida; úsalo como marco voluntario, no como certificación automática del sistema.
En Cerravi, Copilot organiza contexto y propone siguientes pasos para revisión humana. Los recorridos públicos no envían mensajes ni cambian etapas automáticamente. Las propuestas usan productos y precios conocidos; un importe faltante se marca para revisión y no se inventa. Las monedas permanecen separadas salvo conversión aprobada. Buyer Room aporta señales, no confirma identidad, aceptación, firma, pago ni intención. Forecast usa reglas transparentes del CRM y no garantiza cierres. Cualquier integración adicional debe validar su propio consumidor y efecto.

Preguntas frecuentes
Dudas comunes sobre este proceso
¿Por qué una salida de IA se considera no confiable?
Porque puede estar influida por entradas externas, contener datos incorrectos o producir caracteres y argumentos con significado activo para otro sistema. Debe validarse como cualquier entrada antes de cruzar hacia HTML, base de datos, API, archivo, correo o herramienta.
¿Un JSON válido es suficiente para ejecutar una herramienta?
No. El esquema comprueba forma, pero todavía debes validar identidad, tenant, recurso, finalidad, permisos, estado, destino, rangos y aprobación. El servicio que produce el efecto vuelve a autorizar la operación.
¿Se puede ejecutar SQL generado por un modelo?
No debe ejecutarse directamente. Traduce intenciones permitidas a consultas preparadas y parametrizadas, con tablas y operaciones definidas por código. Para análisis flexible usa un entorno aislado, cuenta de solo lectura, dataset reducido, límites y revisión.
¿Cómo se muestra Markdown o HTML generado sin XSS?
Prefiere texto escapado. Si necesitas formato, usa un parser mantenido, una allowlist estricta de elementos y atributos, sanitización del DOM, validación de URLs y una CSP como defensa adicional. Prueba todos los renderizadores y exportaciones.
¿Qué se debe comprobar después de una acción generada por IA?
Comprueba el estado final en el consumidor: DOM, consulta, archivo, mensaje, registro, llamada, cola y log. Verifica identidad, recurso, argumentos, idempotencia y resultado. Una explicación del modelo o una respuesta success no demuestra que el efecto fue correcto.