Colophon

Questo sito è la dimostrazione di sé stesso

Non un portfolio che dice di saper fare ingegneria rispettosa della privacy: uno che la mostra, e che ti lascia verificare ogni affermazione dal tuo browser. Ecco come è fatto e perché.

1. Un virtualhost dedicato

Questo sito non è una pagina incollata sopra al blog: gira su un vhost separato (portfolio.gabrielesalati.eu), con i suoi header e la sua Content-Security-Policy. Separare le responsabilità significa poter rendere questa zona aggressiva sulla sicurezza senza vincolare il resto — e poterla raccontare con precisione.

Verifica: il blog su www.gabrielesalati.eu e questo dominio rispondono con configurazioni diverse. Sono due server block distinti.

2. CSP «JS-aware»: niente script inline

La policy è script-src 'self' senza 'unsafe-inline''unsafe-eval'. Conseguenza pratica: nessun <script> inline, nessun onclick= nell'HTML. Tutto il JavaScript vive in un file esterno self-hosted ed è puro miglioramento progressivo. Non è un vincolo subìto: è la disciplina che impedisce intere classi di XSS.

Verifica: apri i DevTools → scheda «Sorgenti». L'unico script è /assets/js/portfolio.js, servito da questo dominio.

3. Zero terze parti

Niente CDN, niente Google Fonts, niente analytics, niente cookie, niente beacon. I caratteri sono lo stack di sistema: zero font scaricati, niente da tracciare. L'unica richiesta di rete che il JavaScript può fare è verso questa stessa origine.

Verifica: DevTools → «Rete», ricarica. Conta i domini: ce n'è uno solo. Il widget qui sotto te lo conferma da solo.

4. TLS 1.3, senza curve NIST

Solo TLS 1.3. Scambio chiavi su X25519 (niente curve NIST), cifrari ChaCha20-Poly1305 e AES-GCM. Certificato Let's Encrypt gestito in casa, nessun terminatore TLS di terzi, nessun Cloudflare davanti.

Verifica: openssl s_client -connect portfolio.gabrielesalati.eu:443 -tls1_2 deve fallire. Solo 1.3 risponde.

5. Hardening HTTP completo

Ogni risposta porta: HSTS, X-Content-Type-Options: nosniff, Referrer-Policy: no-referrer, una Permissions-Policy che spegne fotocamera, microfono e geolocalizzazione, X-Frame-Options: DENY e le policy Cross-Origin. Non sono parole: sono header che il tuo browser applica.

Verifica: usa il pulsante qui sotto, oppure curl -sI https://portfolio.gabrielesalati.eu/.

6. Funziona anche senza JavaScript

Disattiva il JS: il sito resta intero e leggibile. Il JavaScript aggiunge solo il controllo interattivo qui sotto — un miglioramento, mai un requisito.

Non fidarti — verifica

Questo controllo gira interamente nel tuo browser, con il solo script di questo dominio: scarica gli header di questa pagina e li mostra qui.

Guarda i progetti →