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.
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' né '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.
/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.
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.