FerrisGitSicurezza
Sicurezza e dati
Le misure che proteggono un'istanza, descritte con precisione. I dati non lasciano mai il server.
Cosa restituisce il server
Le intestazioni di sicurezza, così come un'istanza le invia.
$ curl -s -D - -o /dev/null http://localhost:8080/health
HTTP/1.1 200 OK
content-type: text/plain; charset=utf-8
content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; object-src 'none'; base-uri 'self'; frame-ancestors 'none'
x-frame-options: DENY
x-content-type-options: nosniff
referrer-policy: no-referrer
x-robots-tag: noindex, nofollow
content-length: 2
date: Sun, 04 Oct 2026 11:41:43 GMT- L'autenticazione a più fattori è obbligatoria
- Un account senza fattore attivo passa dalla configurazione prima di poter fare qualsiasi altra cosa. TOTP, passkey e codici di recupero.
- Password con hash Argon2
- Un sale per password. Un nome utente sconosciuto costa tanto calcolo quanto una password sbagliata, e riceve la stessa risposta.
- Segreti cifrati con AES-256-GCM
- Variabili CI, segreti dei webhook, password SMTP e segreti TOTP, sotto
SETTINGS_ENCRYPTION_KEY. - Token per Git, mai password
- Git su HTTPS si autentica con un token di accesso personale, conservato con hash: il server non può rileggerlo.
- Un registro di audit
- Accessi falliti, accessi Git rifiutati, reset di password, promozioni e reset dell'MFA da parte di un amministratore vengono registrati come eventi.
- Niente cookie, header rigorosi
- Le sessioni sono JWT. Ogni risposta porta una Content-Security-Policy,
X-Frame-Options: DENY, e le route di accesso sono limitate per IP. - I dati, sul proprio server
- PostgreSQL e una directory di repository, entrambi da salvare a cura di chi gestisce l'istanza. L'immagine gira con un utente senza privilegi su un filesystem in sola lettura.
Valutare FerrisGit, poi distribuire la propria istanza.
L'istanza pubblica consente di conoscere il prodotto. La propria istanza custodisce il codice.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
cp .env.example .env
# set POSTGRES_PASSWORD, JWT_SECRET, SETTINGS_ENCRYPTION_KEY and the admin password in .env
docker compose up -d --build