Aggiornamenti del framework
Molti sviluppatori decidono quali framework e librerie usare per compilare il software principalmente in base alle funzionalità e alle preferenze personali. La scelta del framework è invece una decisione importante, non solo dal punto di vista della progettazione e della funzionalità, ma anche della sicurezza. Scegliere un framework con funzionalità di sicurezza moderne e mantenerlo aggiornato è uno dei modi migliori per garantire la sicurezza delle proprie app.
Scegliere il framework con attenzione
Per quanto riguarda la sicurezza, il fattore più importante nella scelta del framework è il livello di supporto. I framework migliori sono dotati di dispositivi di sicurezza consolidati e sono supportati da una vasta community che li testa e li migliora continuamente. Nessun software è completamente privo di bug o totalmente sicuro, ma quando viene identificata una vulnerabilità è importante avere la certezza che verrà presto risolta o quanto meno verrà trovata una soluzione alternativa.
Spesso "ben supportato" è sinonimo di "moderno". I framework meno recenti tendono a essere sostituiti o a perdere gradualmente popolarità. Anche se si ha una notevole esperienza con un framework meno recente o numerose app scritte con tale framework, è comunque più vantaggioso scegliere una libreria moderna che contenga le funzionalità di cui si ha bisogno. I framework moderni tendono ad avvalersi delle esperienze acquisite dalle versioni precedenti, quindi sceglierli per le nuove app contribuisce a ridurre la superficie di attacco. Se viene identificata una vulnerabilità nel vecchio framework utilizzato dalle applicazioni legacy, si aggiunge un'ulteriore preoccupazione alla lista.
Per altre informazioni sulla progettazione sicura e sulla riduzione della superficie di attacco, vedere Microsoft Azure Well-Architected Framework - Sicurezza.
Mantenere aggiornato il framework
Per i framework di sviluppo software, come Java Spring e .NET Core, vengono rilasciati regolarmente aggiornamenti e nuove versioni. Questi aggiornamenti includono nuove funzionalità, rimozioni di vecchie funzionalità e, spesso, correzioni o miglioramenti per la sicurezza. Quando lasciamo che i framework diventino obsoleti, accumuliamo un "debito tecnico". Più il codice diventa obsoleto, più sarà difficile e rischioso portarlo all'ultima versione. Inoltre, come può accadere con la scelta del framework iniziale, mantenere versioni precedenti del framework può esporre a minacce per la sicurezza che sono state invece risolte nelle versioni più recenti del framework.
Ad esempio, dal 2016-2017 sono state individuate oltre 30 vulnerabilità nel framework Apache Struts. Le vulnerabilità sono state prontamente risolte dal team di sviluppo, ma alcune aziende non hanno implementato le relative patch, subendo conseguenze in termini di violazioni dei dati. Assicurarsi quindi di mantenere i framework e le librerie sempre aggiornati.
Come si aggiorna il framework?
Alcuni framework, come Java o .NET, richiedono un'installazione e vengono in genere rilasciati con una cadenza nota. È consigliabile attendere il rilascio di nuove versioni e pianificare la creazione di un ramo del codice da testare al momento del rilascio. Ad esempio, .NET Core ha una pagina di note sulla versione che è possibile controllare per trovare le ultime versioni disponibili.
È possibile aggiornare librerie più specializzate, come i framework JavaScript o i componenti .NET, tramite uno strumento di gestione pacchetti. NPM e Webpack sono le opzioni più comuni per i progetti Web e sono supportate dalla maggior parte degli ambienti di sviluppo integrato (IDE) o dagli strumenti di compilazione. In .NET si usa NuGet per gestire le dipendenze dei componenti. Allo stesso modo di come si aggiorna un framework, creare un ramo del codice, aggiornare i componenti ed effettuare dei test rappresentano un'efficace metodologia per convalidare una nuova versione di una dipendenza.
Nota
Lo strumento da riga di comando dotnet
ha le opzioni add package
e remove package
per aggiungere e rimuovere pacchetti NuGet, ma non ha un comando update package
corrispondente. È però possibile eseguire dotnet add package <package-name>
nel pacchetto per aggiornare automaticamente il pacchetto all'ultima versione. È un modo facile di aggiornare le dipendenze senza dover aprire l'IDE.
Sfruttare le funzionalità di sicurezza predefinite
È sempre opportuno verificare cos'hanno da offrire le funzionalità di sicurezza dei framework. Non implementare mai le proprie funzionalità di sicurezza se esiste già una tecnica o una funzionalità standard integrata. Usare inoltre algoritmi e flussi di lavoro consolidati, in quanto spesso sono già stati esaminati da molti esperti, criticati e quindi rafforzati, pertanto sono certamente affidabili e sicuri.
Il framework .NET Core dispone di innumerevoli funzionalità di sicurezza. Ecco alcuni punti di partenza essenziali nella documentazione:
- Autenticazione - Gestione delle identità
- Autorizzazione
- Protezione dei dati
- Configurazione sicura
- API di estendibilità della sicurezza
Ognuna di queste funzionalità è stata realizzata da professionisti del settore e successivamente sottoposta a rigidi test per assicurarsi che operino esattamente come previsto, e unicamente in quel modo. Altri framework offrono funzionalità simili. Verificare con il fornitore del framework le funzionalità disponibili per ogni categoria.
Avviso
Scrivere personalmente i controlli di sicurezza, anziché utilizzare quelli offerti dal framework, rappresenta non solo un dispendio di tempo, ma introduce anche un maggior rischio per la sicurezza.
Microsoft Defender for Cloud
Quando si usa Azure per ospitare le proprie applicazioni Web, Defender for Cloud invia un avviso se i framework in uso non sono aggiornati usando la scheda Raccomandazioni. Consultare periodicamente questa scheda per verificare la presenza di avvisi relativi alle app.
Riepilogo
Quando possibile, scegliere un framework moderno per la compilazione delle app, usare sempre le funzionalità di sicurezza integrate e assicurarsi di mantenere il framework aggiornato. Queste semplici regole aiuteranno a creare solide basi per la compilazione delle applicazioni.