Ciao, e benvenuto nella quarta puntata della sessantesima stagione. Oggi parliamo di una delle qualità più sottovalutate di WebAssembly, e forse la più importante per il suo futuro fuori dal browser. Non è la velocità: è la sicurezza. La capacità di eseguire, senza rischi, codice di cui non ti fidi affatto. Oggi parliamo del recinto.
Partiamo dal problema, perché è enorme e antico. Eseguire codice scritto da altri è una delle cose più pericolose che si possano fare. Quando lanci un programma sul tuo computer, quel programma, di solito, può fare quasi tutto ciò che potresti fare tu: leggere i tuoi file, cancellarli, connettersi a internet, spiare quello che digiti. Ti fidi ciecamente di chi lo ha scritto. Ma cosa succede quando vuoi eseguire codice di cui non ti fidi? Un pezzo scritto da uno sconosciuto, un'estensione presa chissà dove, del codice arrivato dalla rete? Normalmente, è una roulette russa.
Voglio dirti come WebAssembly ribalta la situazione, perché è netto. WebAssembly parte da un principio opposto a quello solito. Il principio normale è: puoi fare tutto, salvo ciò che è vietato. Il principio di WebAssembly è: non puoi fare niente, salvo ciò che ti è espressamente concesso. Quando un pezzo di codice gira dentro WebAssembly, per impostazione predefinita è murato in una stanza vuota. Non può leggere i tuoi file. Non può connettersi alla rete. Non può guardare la memoria del resto del programma. Non può parlare col sistema. Non perché glielo abbiamo proibito una cosa alla volta, ma perché di base non ha accesso a nulla. È chiuso in un recinto.
Voglio spiegarti come diventa utile, perché un recinto vuoto non farebbe niente. Ovviamente, un codice che non può fare assolutamente nulla è inutile. E allora entra in gioco la parte elegante: i permessi espliciti. Tu, che ospiti quel codice, gli passi solo ed esattamente le capacità che vuoi concedergli, una per una. Vuoi che possa leggere una certa cartella, e solo quella? Gli passi la chiave di quella cartella. Vuoi che possa fare un solo tipo di richiesta di rete? Gli dai quel permesso specifico. Tutto il resto resta murato. Così puoi far girare codice di uno sconosciuto sapendo con precisione l'unica manciata di cose che è in grado di toccare, e dormendo sonni tranquilli su tutto il resto.
Voglio darti l'immagine che rende chiara questa idea, perché la fissa. Pensa a una di quelle camere sigillate con i guanti incorporati, quelle che si vedono nei laboratori per maneggiare sostanze pericolose. Dentro puoi mettere qualunque cosa, anche il materiale più tossico, e farlo lavorare: puoi infilare le mani nei guanti e manipolarlo. Ma quella sostanza non può uscire, non può toccare l'aria della stanza, non può farti del male, perché è chiusa in un contenitore sigillato che le lascia fare solo ciò che tu permetti attraverso quei guanti. WebAssembly è quella camera sigillata: dentro ci metti anche il codice più sospetto, lo fai lavorare, e sei protetto, perché può interagire col mondo solo attraverso i pochi guanti che gli hai concesso.
Voglio dirti perché questo cambia tutto, perché è il suo futuro. Questa proprietà, apparentemente tecnica, apre scenari enormi. Vuol dire poter permettere agli utenti di aggiungere pezzi al tuo programma, scritti da loro, senza rischiare che facciano danni. Vuol dire eseguire codice non fidato preso dalla rete in totale sicurezza. Vuol dire far convivere, sullo stesso server, il codice di clienti diversi, ognuno nel suo recinto, senza che si tocchino. Molti degli usi più promettenti di WebAssembly fuori dal browser nascono proprio da qui: non dalla velocità, ma dalla capacità di eseguire codice altrui senza fidarsi, e restando al sicuro.
Voglio darti la lezione generale, perché è un principio di sicurezza prezioso. La lezione è la potenza del vietato tutto per impostazione predefinita. Nella sicurezza, partire dal permettere tutto e poi vietare i pericoli è una battaglia persa: dimenticherai sempre qualcosa, e ogni dimenticanza è una falla. Partire dal vietare tutto e poi concedere solo il minimo indispensabile è molto più solido: quello che non hai concesso, semplicemente, non può accadere. È un ribaltamento mentale che vale ovunque nella sicurezza, e WebAssembly lo ha costruito nelle sue fondamenta.
Per oggi ci fermiamo qui. Abbiamo visto il recinto, la sicurezza di WebAssembly. Eseguire codice altrui è pericoloso, perché di solito quel codice può fare quasi tutto. WebAssembly ribalta il principio: non puoi fare niente, salvo ciò che ti è espressamente concesso. Di base il codice è murato in una stanza vuota, senza accesso a file, rete, sistema; e tu gli passi, uno per uno, solo i permessi che vuoi. Come una camera sigillata coi guanti, dove maneggi in sicurezza anche il materiale più tossico. Questo apre gli scenari più promettenti fuori dal browser: estensioni, codice non fidato, clienti diversi sullo stesso server, ognuno nel suo recinto. La lezione: il vietato tutto per impostazione predefinita è la sicurezza fatta bene. Nella prossima puntata: il confine, dove finisce la magia. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.