WU / DOCSUNIVERSAL MICROFRONTENDS
ES

Política HTTP y límites del host

Configurar cabeceras, CSP, orígenes y publicación sin confundirlas con permisos del runtime.

Consulta las versiones, cambios y requisitos en Framework 4.0 y CLI 1.2.

Dos controles con responsabilidades distintas

security en wu.config.json define la política HTTP que sirve WU y que el build exporta para otros hosts. Los grants de cada app forman parte de la autoridad que el host entrega al runtime. Una cabecera CSP no sustituye el contrato de capacidades, y un grant no autoriza por sí solo al navegador a cargar un origen bloqueado por CSP.

Configuración

{
  "security": {
    "enabled": true,
    "csp": "",
    "frame_options": "DENY",
    "referrer_policy": "strict-origin-when-cross-origin",
    "nosniff": true,
    "app_origins": ["https://apps.example.com"],
    "connect_origins": ["https://api.example.com"],
    "wasm": false
  }
}

Los dominios del ejemplo son marcadores de posición. La política debe describir los orígenes que tu aplicación realmente utiliza.

Campo Efecto
enabled Activa o desactiva el conjunto de cabeceras
csp Política generada, literal, report-only u off
frame_options X-Frame-Options; defecto DENY
referrer_policy Política de referencia
permissions_policy Capacidades del navegador por Permissions-Policy
hsts Strict-Transport-Security; útil al servir mediante TLS
nosniff X-Content-Type-Options: nosniff
corsOrigin o cors Origen CORS; cors también admite un objeto con origin
app_origins Orígenes de bundles: script y conexiones
connect_origins Orígenes de API: conexiones
wasm Permite compilación WASM en la CSP generada

El parser también contempla grafías camelCase para varios campos, como appOrigins, connectOrigins, frameOptions y wasmUnsafeEval. Para CORS hay una excepción importante: cors_origin es el nombre interno de la estructura, pero el JSON acepta corsOrigin o cors, no esa grafía snake_case.

Convenciones de valores

Para los campos de cabecera de texto, una cadena vacía deja decidir a WU y off suprime esa cabecera. csp: "report-only" genera una política equivalente en la cabecera de reporte; el navegador informa infracciones sin bloquearlas por esa política. Una cadena CSP literal se utiliza tal cual.

La generación analiza los scripts inline del documento final y calcula hashes. Hace falta ejecutarla después de cualquier inserción de catálogo o import map. Introducir un handler HTML como onclick tiene un tratamiento diferente de un script con hash; los diagnósticos señalan incompatibilidades. Mantener eventos en módulos y estilos en hojas evita depender de excepciones del HTML.

En 1.2.0, los hashes CSP se calculan por página y normalizan saltos CRLF. security.upgradeInsecureRequests permite controlar la promoción a HTTPS. El build conserva _headers del shell, aplica caché inmutable a archivos con hash y valida valores para impedir inyección de cabeceras. Revisa la política realmente enviada por el hosting con wu doctor --url.

CORS

No se emite Access-Control-Allow-Origin por defecto. Para servir microapps desde el mismo origen no hace falta habilitar *. Cuando la topología exige un origen distinto, configura el valor concreto y revisa también CSP, credenciales y la política del destino.

La opción cors de una regla de proxy pertenece a esa regla. No es idéntica a security.corsOrigin, que gobierna las respuestas del servidor de producción.

Archivos publicables

La seguridad de rutas decodifica escapes antes de comprobar segmentos y rechaza traversal, controles, barras invertidas y paths absolutos. El filtro de archivos bloquea dotfiles y extensiones o nombres considerados sensibles. .well-known es una excepción deliberada porque contiene documentos públicos de protocolo.

El build y doctor revisan áreas publicables, pero el lugar correcto de una credencial sigue siendo el backend o su entorno. Si una aplicación necesita un token privado, no debe incorporarlo a sus fuentes o a public/, aunque un nombre concreto no figure en la lista de bloqueos.

El servidor de desarrollo aplica su propia política de Host, CORS, HMR y acceso a archivos, incluso para sourcemaps, módulos y query imports. Configura túneles mediante dev.allowedHosts; solo VITE_* y WU_* de .env llegan al navegador. Consulta desarrollo para migrar estos comportamientos.

Sentinel

La instancia del sentinel está desactivada en wu dev y se instancia con sus valores predeterminados en wu serve. Hay código para clasificar solicitudes y publicar rutas de protocolo ACP. La existencia de esos módulos no acredita protección universal frente a automatización ni reemplaza control de acceso del producto.

CLI 1.2.0 acepta manifest: "define" en cada app y security.frameOrigins para los iframes remotos. Los orígenes de frames solo entran en frame-src; no habilitan scripts ni conexiones del host. El filtro de navegación de catálogos no bloquea su lectura por fetch. Consulta apps remotas y build.

Referencia de implementación

  • wu-cli/src/config/config.zig
  • wu-cli/src/runtime/security.zig
  • wu-cli/src/runtime/project_fs.zig
  • wu-cli/src/runtime/allowed_hosts.zig
  • wu-cli/src/runtime/dev/env.zig
  • wu-cli/tests/dev-security.test.cjs
  • wu-cli/tests/doctor-policy.test.cjs
WU SE CONSTRUYE CONTIGO

¿Encontraste un bug? ¿Tienes una idea?

Tu experiencia mejora WU. Cuéntanos qué falla o ayuda a sostener su desarrollo.