Quanto accaduto ieri, primo giorno in cui era possibile richiedere il bonus che lo Stato ha assegnato ai lavoratori autonomi per l’emergenza covid-19, ha dell’incredibile. Era previsto (non prevedibile, ma ampiamente previsto!) che tutti gli aventi diritto avrebbero immediatamente provato a compilare la domanda collegandosi contemporaneamente al portale dell’INPS. Chi gestisce un portale di commercio elettronico sa bene, anzi è il suo obiettivo, che annunciando delle offerte su alcuni prodotti dovrà fronteggiare numerose richieste di accesso contemporaneo dei potenziali clienti. E prende le dovute contromisure, sia aumentando temporaneamente la capacità di accoglienza del sito, oggi fattibile se si dispone di una architettura distribuita o “cloud”, sia dotandosi di una sorta di “eliminacode” che consente l’accesso a un numero massimo di soggetti contemporaneamente, chiedendo agli eccedenti di riprovare successivamente. In questi giorni in cui stiamo tutti a casa, sarà capitato a tanti di voler fare la spesa on-line e di trovare il sito del supermercato pienamente operativo ma indisponibile per raggiunto numero massimo di clienti che è possibile servire contemporaneamente.
Non stiamo parlando di tecnologie costose o particolarmente innovative. Parliamo del buonsenso che si applica nella vita quotidiana, utilizzato questa settimana anche da Poste per evitare la ressa agli sportelli per l’erogazione delle pensioni: hanno scaglionato l’accesso in base alla lettera del cognome. Nella giornata odierna misure analoghe sono state (finalmente!) adottate anche per l’accesso al sito INPS.
Ora, la totale mancanza di una politica di base per la gestione degli accessi al sito come quella mostrata ieri in un previsto picco di accessi, ha sollevato degli interrogativi sulla qualità di un sistema informatico centrale per la vita degli Italiani in quanto gestore della previdenza e del sostegno sociale. Siamo allora andati a vedere cosa c’è appena sotto la superficie del sito web dell’Istituto, analizzando i programmi che costruiscono le pagine che visualizziamo nel nostro browser. Si tratta di codice pubblico perché è quello che riceve il nostro computer quando si collega a qualunque sito web, codice che è elaborato in locale e che fornisce come risultato l’aspetto grafico della pagina.
Quanto appare agli occhi di un programmatore è un sistema sviluppato in modo sciatto. Se uno studente di scuola superiore o del primo anno di università presentasse un programma in quello stato, verrebbe immediatamente respinto perché non rispetta i criteri minimi di ordine, rigore e professionalità nella scrittura di codice.
Vediamo alcuni esempi.
Il codice di una delle pagine contiene una variabile, cioè un ‘contenitore’ di valori la cui elaborazione determina o le successive fasi di un procedimento o l’aspetto grafico della pagina, il cui nome è “pippo”. Ora, in uno scambio colloquiale si può far riferimento a personaggi Disney analogamente agli italici “Tizio”, “Caio”, e “Sempronio”. Ma in un programma il nome delle variabili deve essere sempre tale da consentire di comprendere quale è il ruolo nel programma. Un professionista non rilascerebbe mai un programma i cui nomi sono fantasiosi e non assegnati in modo da avere un riferimento preciso al flusso di elaborazione per il quale sono stati inseriti.
Ad alcuni può sembrare un vezzo estetico, ma la mancata cura di tutti gli aspetti di un programma che consentano di verificare correttezza e coerenza di un programma può essere indicatore di altre mancanze più gravi. Questa sciatteria si mostra anche nella presenza di commenti gergali come “skippa” che francamente non vorremmo mai aver visto in quelle pagine. Ed infatti, in altre pagine si trovano ancora presenti numerosi commenti in lingua italiana che indicano tutte le modifiche eseguite con indicazione delle motivazioni, a volte legate alla risoluzione di “problemi”. Ecco, se si vuole solleticare la curiosità di un “hacker” non c’è niente di meglio di comunicargli in modo diretto e sincero che sono presenti dei problemi.
In altre pagine, sono ancora presenti commenti che spiegano l’effetto delle funzioni che seguono. Un linguaggio di programmazione è appunto un linguaggio, e chi ne ha padronanza non ha bisogno di commenti per comprenderne il significato. Di solito lo sviluppo di un programma è preceduto da una fase di progetto dove si spiega in linguaggio naturale cosa dovrà eseguire, mentre il linguaggio di programmazione specifica il come, senza mescolare i due piani. Senza contare che i commenti possono involontariamente rivelare delle debolezze del sistema che possono essere sfruttare per violare un sito.
Scendendo più nel tecnico, in un’altra pagina si trova una chiave di accesso a un contenuto riportata in chiaro. Indipendentemente dalla tipologia del contenuto e del livello di segretezza di quella chiave, è una cattiva pratica di programmazione e pertanto chi è abituato a non esporre pubblicamente le chiavi di accesso non lo fa per nessun tipo di risorsa. Anche le variabili di sessione, quelle che consentono al nostro browser di continuare a navigare nelle pagine secondo il nostro profilo di utente, sono gestite in modo superficiale, dandone visibilità all’esterno.
Questa breve analisi non ha certo lo scopo di emettere un giudizio complessivo sul sistema informatico dell’istituto, non avendo fatto accesso alle procedure interne ma solo a quelle che sono immediatamente visibili a chiunque navighi nel sito. È tuttavia inaccettabile vedere nel 2020 che il codice del sito di uno dei più importanti istituti dell’amministrazione pubblica è stato sviluppato in modo scarsamente professionale, risultando noncurante delle linee guida che nelle scuole e nelle università si insegnano per sviluppare applicazioni di qualità, robuste e resistenti agli attacchi.
Foto: Twitter