Seguridad
Límites reales de seguridad de SwissKnife, cabeceras HTTP y canal de comunicación.
SwissKnife es una aplicación estática sin backend, cuentas de usuario ni claves API. Los archivos multimedia nunca salen de la pestaña. La superficie de ataque relevante abarca la cadena de dependencias, la imagen Docker, los flujos de GitHub Actions, las cabeceras HTTP y el entorno del navegador.
Cabeceras del contenedor
nginx.conf envía, entre otras:
Cross-Origin-Opener-Policy: same-originCross-Origin-Embedder-Policy: require-corpCross-Origin-Resource-Policy: same-originX-Content-Type-Options: nosniffReferrer-Policy: no-referrerX-Frame-Options: DENYPermissions-Policy: camera=(), microphone=(), geolocation=()- una CSP limitada a
'self', conscript-srcque permite'wasm-unsafe-eval'yblob:, eimg-src/media-src/connect-src/worker-srcque permitenblob:
El proceso de Nginx no se ejecuta como root.
Sin COOP/COEP, SharedArrayBuffer no está disponible y FFmpeg WASM no puede cargarse. Consulta Proxy inverso.
Cabeceras de la demo en Vercel
El vercel.json del producto aplica las mismas familias de cabeceras para WASM, además de X-Robots-Tag: noindex, nofollow.
Privacidad
Los archivos del usuario nunca se suben. El núcleo de FFmpeg se descarga desde el propio origen de la aplicación al procesar el primer archivo multimedia, no desde unpkg. Las conversiones de imágenes mediante Canvas no provocan esta descarga.
Recomendaciones
- utiliza un proxy inverso HTTPS si publicas fuera de tu red local;
- no presentes una instancia real como «demo oficial»: utiliza demo.swissknife.lucas-homelab.fr;
- comunica las vulnerabilidades mediante la Política de seguridad, no en una incidencia pública si debilitan la garantía de «ninguna subida».
SwissKnife no tiene JWT, cookies de sesión ni variables de entorno secretas que rotar.