Ciao, e benvenuto nella prima puntata della cinquantaduesima stagione di questo podcast. Dopo due stagioni sulle persone, il team e la carriera, torniamo alla macchina, ma con un tema che, vedremo, resta profondamente umano nei suoi fallimenti. Torniamo agli accordi con cui i programmi si parlano, le interfacce, e ci chiediamo: come si tengono al sicuro? Oggi apriamo la sicurezza delle interfacce, quelle che chiamiamo comunemente le API.
Partiamo da cos'è, in fondo, un'interfaccia, perché tutto nasce da lì. In alcune stagioni passate abbiamo detto che un'interfaccia è una porta che apri di proposito nel muro del tuo sistema, perché altri programmi possano parlarci. È un accordo: tu prometti che, se chiedono in un certo modo, ottengono una certa risposta. Ma ogni porta che apri per far entrare le persone giuste è anche una porta per quelle sbagliate. E fuori da quella porta, a differenza di dentro, non controlli niente e non conosci nessuno.
Voglio darti la verità di fondo, perché è la tesi di tutta la stagione. La verità che tiene insieme dieci puntate è questa: il server non deve mai fidarsi del client. Mai. Tutto ciò che arriva da fuori, la richiesta, i dati, l'identità dichiarata, ogni singola cosa, è un'affermazione, non un fatto. Qualcuno che sostiene di essere chi dice, di poter fare ciò che chiede, di mandarti dati innocui. E il tuo compito, a ogni richiesta, è non credergli sulla parola: verificare. La fiducia, oltre quella porta, va guadagnata a ogni singolo passaggio, mai concessa in anticipo. E attenzione: non basta verificare una volta, all'entrata, e poi fidarsi per sempre. Ogni richiesta è un nuovo estraneo che bussa, anche se dice di essere lo stesso di un attimo fa: la sicurezza non ha memoria, ha solo il presente della richiesta che sta guardando adesso.
Voglio dirti perché questo è il cuore di tutto, perché spiega quasi ogni disastro. Quasi ogni falla di sicurezza che vedremo, quando la smonti, è la stessa cosa: un momento in cui il server si è fidato di qualcosa di cui non doveva fidarsi. Ha creduto che l'identità dichiarata fosse vera. Ha creduto che quei dati fossero solo dati. Ha creduto che, siccome eri entrato, potessi vedere tutto. Ha creduto che nessuno avrebbe provato quella cosa strana. La sicurezza non è una collezione di trucchi: è la disciplina di non fidarsi, applicata con ostinazione, ovunque la fiducia sia mal riposta. Impara a vedere quel momento, il punto in cui il tuo codice crede a qualcosa che arriva da fuori, e avrai imparato a vedere dove si annidano quasi tutti i problemi.
Voglio togliere subito due malintesi, perché sono pericolosi. Primo: la sicurezza non è un prodotto che compri e attacchi sopra alla fine. Non è una scatola, un firewall, un servizio esterno che risolve tutto. È un modo di pensare, presente in ogni decisione e in ogni riga. Secondo: la sicurezza non è paranoia. Non stiamo dicendo che il mondo è cattivo. Stiamo dicendo che la porta è aperta a tutti, e tra tutti c'è anche chi ha cattive intenzioni, e tu non sai chi bussa. È igiene, non paura: come lavarsi le mani, non come vivere barricati.
Voglio anticiparti dove andremo, perché il viaggio ha una mappa. Nelle prossime puntate ci chiederemo, in ordine: chi sei, l'autenticazione. Cosa ti è permesso fare, l'autorizzazione, e il buco più comune di tutti. Perché il client mente sempre, e come i dati diventano attacchi. Come proteggere la conversazione allo scoperto. Come difendersi da chi chiede troppo, e troppo spesso. Come non dire più del necessario. Come custodire i segreti. E come dare per scontato di essere violati, difendendosi a strati. Un pezzo alla volta.
Voglio chiudere con un pensiero, perché dà il tono a tutto. C'è una tentazione, in questo mestiere, di pensare alla sicurezza come a un lusso, qualcosa da aggiungere dopo, quando tutto funziona. È l'errore più costoso che esista, perché la porta è aperta dal primo giorno, e chi bussa non aspetta che tu sia pronto. La sicurezza non è ciò che fai alla fine: è il modo in cui costruisci fin dall'inizio, con addosso la consapevolezza che, oltre quella porta, c'è un mondo intero che non conosci, e che non tutti sono venuti in pace.
Per oggi ci fermiamo qui. Abbiamo aperto la stagione sulla sicurezza delle interfacce. Un'interfaccia è una porta che apri di proposito nel muro, e ogni porta per le persone giuste è anche una porta per quelle sbagliate. La tesi di tutta la stagione: il server non deve mai fidarsi del client, perché tutto ciò che arriva da fuori è un'affermazione, non un fatto, da verificare a ogni passaggio. Quasi ogni falla, smontata, è un momento in cui il server si è fidato di ciò di cui non doveva. Due malintesi da togliere: la sicurezza non è un prodotto da attaccare alla fine, ed è igiene, non paranoia. Non un lusso da aggiungere dopo, ma il modo in cui costruisci dall'inizio. Nella prossima puntata: chi sei, l'autenticazione. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.