Sécurité
Périmètre réel de SwissKnife, en-têtes HTTP et canal de signalement.
SwissKnife est une application statique sans backend, compte utilisateur ni clé API. Les médias ne quittent pas l'onglet. La surface pertinente est la chaîne de dépendances, l'image Docker, les workflows GitHub Actions, les en-têtes HTTP et le navigateur.
En-têtes du conteneur
nginx.conf envoie notamment :
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=()- une CSP limitée à
'self', avecscript-srcautorisant'wasm-unsafe-eval'etblob:,img-src/media-src/connect-src/worker-srcautorisantblob:
Le processus Nginx n'est pas root.
Sans COOP/COEP, SharedArrayBuffer est indisponible et FFmpeg WASM ne charge pas. Voir Reverse proxy.
En-têtes de la démo Vercel
vercel.json du produit applique les mêmes familles d'en-têtes WASM, plus X-Robots-Tag: noindex, nofollow.
Vie privée
Pas d'upload des fichiers utilisateur. Le core FFmpeg est téléchargé depuis l'origine de l'application au premier média, pas depuis unpkg. Les images Canvas ne déclenchent pas ce téléchargement.
Recommandations
- préférez un reverse proxy HTTPS si vous publiez hors du LAN ;
- ne montrez pas une instance réelle comme « démo officielle » : utilisez demo.swissknife.lucas-homelab.fr ;
- signalez une vulnérabilité selon Politique de sécurité, pas dans une issue publique si elle affaiblit la garantie « aucun envoi ».
SwissKnife n'a pas de JWT, de cookie de session ni de variable d'environnement secrète à rotater.