ArtiFerrisSécurité

Sécurité et vos données

Les mesures qui protègent une instance, décrites précisément. Les données restent sur votre serveur ; seuls les noms et versions des paquets audités partent vers registry.npmjs.org.

Ce que renvoie le serveur

Les en-têtes de sécurité, tels qu'une instance les envoie.

$ curl -s -D - -o /dev/null https://app.artiferris.pro/healthz
HTTP/2 200
content-security-policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; font-src 'self' data:; connect-src 'self'; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'
content-type: text/plain; charset=utf-8
cross-origin-opener-policy: same-origin
cross-origin-resource-policy: same-origin
date: Tue, 06 Oct 2026 14:31:01 GMT
permissions-policy: accelerometer=(), autoplay=(), camera=(), display-capture=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), usb=(), xr-spatial-tracking=()
referrer-policy: same-origin
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: origin
x-content-type-options: nosniff
x-frame-options: DENY
x-xss-protection: 1; mode=block
content-length: 2
L'instance de production, version 0.6.1, interrogée sur /healthz le 6 octobre 2026. Le serveur pose la politique de contenu, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy et les politiques Cross-Origin ; ici, Strict-Transport-Security et X-XSS-Protection viennent du reverse proxy.
La double authentification est obligatoire
Application d'authentification ou clé d'accès, avec dix codes de secours. Un jeton distinct et de courte durée représente « mot de passe vérifié, second facteur attendu » ; il ne sert pas de session.
Mots de passe hachés avec Argon2
Pour les comptes locaux. Les comptes LDAP et OIDC s'authentifient auprès de leur fournisseur, et les connexions échouées sont limitées.
Des droits vérifiés sur chaque route
Les droits d'un dépôt sont contrôlés par le serveur, pas seulement masqués dans l'interface. Les corps de requête ne sont lus qu'après ces contrôles.
Secrets chiffrés en AES-256-GCM
Mots de passe SMTP, LDAP et OIDC, identifiants des proxys et graines TOTP, sous SECRETS_ENCRYPTION_KEY, qui se change sans perte par une rotation.
Des jetons, stockés hachés
Les outils en ligne de commande s'authentifient avec un jeton API, que le serveur ne peut pas relire. Les jetons que Docker obtient après docker login durent 2 minutes.
Une mémoire bornée
Les blobs Docker vont sur disque au fil de l'eau. Les documents gardés en mémoire puisent dans un budget de 1 Gio, et un client n'a que quatre corps en cours.
Un budget pour le trafic anonyme
Pages publiques, API publique et lectures npm et Docker ont un budget par client et par minute, partagé entre réplicas. La base ne reçoit que des empreintes, jamais une adresse.
Des journaux d'audit et de sécurité
Conservés 365 jours par défaut. Les connexions, les accès refusés et les actions d'administration y sont enregistrés.
Des connexions sortantes contrôlées
LDAP, SMTP, OIDC et les proxys ne joignent pas d'adresse privée, sauf les plages que vous autorisez. Un proxy n'envoie ses identifiants qu'au registre amont configuré, en https.
Vos données, sur votre serveur
PostgreSQL et un volume, tous deux à vous de sauvegarder. Avec le chart Helm, le pod tourne sans privilège, sur un système de fichiers en lecture seule.

La section Sécurité du README

Évaluez ArtiFerris, puis déployez votre propre instance.

L'instance publique permet de découvrir le produit. Votre instance conserve vos paquets.

Démarrer la pile avec Docker Compose
git clone https://github.com/Masmarino/ArtiFerris.git
cd ArtiFerris
cp .env.example .env
# set POSTGRES_PASSWORD, JWT_SECRET, SECRETS_ENCRYPTION_KEY, PUBLIC_URL and the first admin in .env
docker compose up -d --build