• sicurezza
  • identità
  • checklist
  • autenticazione

La checklist essenziale di sicurezza per l'identità dell'utente

La costruzione dell'identità dell'utente è un componente critico di qualsiasi applicazione. La convalida dei nomi utente e delle password può sembrare l'approccio più semplice, ma ci sono molti altri aspetti da considerare.

Gao
Gao
Founder

Introduzione

La costruzione dell'identità dell'utente è un componente critico di qualsiasi applicazione. Permette di fornire esperienze personalizzate, migliorare la qualità dei dati e migliorare la ritenzione degli utenti.

La convalida dei nomi utente e delle password può sembrare l'approccio più semplice, ma ci sono molti altri aspetti da considerare. Cominciamo!

Infrastruttura

Imporre HTTPS

Cominciamo con le basi. Imporre sempre l'uso del HTTPS (Hypertext Transfer Protocol Secure) per crittografare la trasmissione dei dati su internet. HTTPS garantisce che i dati scambiati tra il dispositivo dell'utente e il tuo server rimangano confidenziali e inalterabili.

Impostare HTTPS può sembrare impegnativo, ma ci sono molti strumenti e servizi disponibili per aiutarti:

  • Se stai ospitando autonomamente, Let's Encrypt fornisce certificati SSL/TLS gratuiti che possono essere utilizzati per abilitare HTTPS sul tuo sito web.
  • Se stai utilizzando un provider cloud, come AWS, Azure o Google Cloud, puoi utilizzare i loro servizi gestiti per impostare HTTPS.

Non permettere l'accesso pubblico al database, limitato solo a fonti fidate

Anche se può sembrare basilare, ci sono stati numerosi attacchi alla sicurezza dovuti alla concessione dell'accesso pubblico ai database. Quindi vale la pena menzionarlo qui.

Ricorda sempre di non permettere l'accesso pubblico al tuo database. Metti il tuo database in una rete privata e permetti l'accesso solo da fonti fidate.

Gestire in modo sicuro i token privati

I token privati, come i token di accesso o le chiavi API, vengono spesso utilizzati per scopi di autenticazione e autorizzazione programmatori. Per gestire questi token in modo sicuro:

  • Utilizzare token a breve durata e token di aggiornamento per ridurre il rischio di accesso non autorizzato.
  • Utilizzare un meccanismo di archiviazione dei token sicuro, come un key vault, per proteggere i token dall'accesso non autorizzato.
  • Ruotare regolarmente i token per prevenirne il compromesso. Alcuni protocolli, come OAuth 2.0, forniscono un meccanismo per la rotazione dei token.
  • Mantieni il controllo sulla revoca dei token in caso di violazione della sicurezza.

Scegliere saggiamente un algoritmo di hash della password

Se hai esperienza con l'hash delle password, potresti essere consapevole che ci sono molti algoritmi disponibili, alcuni dei quali non sono più considerati sicuri, come MD5, SHA-1 e SHA-2.

Alcune ragioni comuni per la loro insicurezza sono:

  • Non sono stati progettati specificamente per l'hash delle password, e la loro velocità di calcolo è troppo alta, rendendo più facili gli attacchi di forza bruta.
  • Mancano l'uso del sale, che rende più facile creare tabelle arcobaleno per loro.
  • Sono suscettibili agli attacchi di collisione, consentendo agli aggressori di generare password diverse con lo stesso valore hash.

Gli algoritmi di hash delle password standard del settore, come bcrypt e Argon2, sono stati progettati per affrontare questi problemi. A causa dell'ambito limitato di questo articolo, non andremo nei dettagli su di essi. Vedi L'evoluzione dell'hash delle password per saperne di più.

Imparare e aderire rigorosamente agli standard aperti

Gli standard aperti come OAuth 2.0 e OpenID Connect (OIDC) forniscono approcci sicuri e standardizzati per l'autenticazione e l'autorizzazione degli utenti. Sono stati testati in battaglia e adottati ampiamente dall'industria.

Tuttavia, implementarli in modo errato può portare a vulnerabilità di sicurezza, anche per i grandi team con sviluppatori esperti. Un recente esempio è la vulnerabilità OAuth scoperta in Expo, un popolare framework per lo sviluppo di app mobili. Serve come un buon esempio di come un piccolo errore può portare a una violazione della sicurezza.

Cripta i dati a riposo

I dati a riposo, come le informazioni utente memorizzate o i backup del database, dovrebbero essere crittografati utilizzando un forte algoritmo di crittografia. Questo garantisce che anche se i dati sono compromessi, non possono essere letti senza la chiave di decrittografia. Verifica se il tuo provider cloud supporta questa funzione, poiché è comunemente richiesta per scopi di conformità.

Configura i firewall

Gli attacchi DDoS (Distributed Denial of Service), sebbene antichi, rimangono una minaccia significativa. Secondo il Rapporto sulle minacce DDoS di Cloudflare per il Q4 2022, il traffico degli attacchi HTTP DDoS è aumentato del 79% YoY. Invece di costruire la tua soluzione, è una buona idea configurare firewall gestiti e utilizzare notificatori per mitigare questo rischio.

App e clienti

Migliorare il livello di sicurezza per i client pubblici

I clienti pubblici, come le app mobili o le applicazioni a pagina singola, sono più suscettibili alle vulnerabilità di sicurezza. Anche se li fornisci, dovresti trattarli come fonti non affidabili nel tuo modello di sicurezza. Ad esempio:

Non fidarti mai dei dati di input pubblici

L'input dell'utente può essere una fonte significativa di vulnerabilità alla sicurezza, spesso trascurata. Alcuni tipi comuni di vulnerabilità trascurate sono Cross-Site Scripting (XSS) e SQL Injection. Assicurati di validare e sanificare tutti i dati di input dell'utente prima di utilizzarli.

Tieni traccia delle attività

Il mantenimento di un registro di controllo delle attività degli utenti aiuta a rilevare e indagare gli incidenti di sicurezza. Registra e monitora le azioni degli utenti, come i tentativi di login, i cambiamenti di password o le operazioni sensibili. L'analisi di questi log può fornire preziose informazioni sulle potenziali violazioni di sicurezza o sulle attività sospette.

Implementa un'autenticazione solida

Implementa un forte meccanismo di autenticazione per verificare l'identità degli utenti. Come detto prima, prendi in considerazione l'uso di protocolli sicuri come OAuth 2.0 o OpenID Connect per l'autenticazione. Per maggiori informazioni, puoi fare riferimento a CIAM 101: Autenticazione, Identità, SSO.

Costruire un'autorizzazione solida (ad es. Implementa il controllo degli accessi basato sui ruoli)

Oltre all'autenticazione, dovrebbero essere in atto adeguati meccanismi di autorizzazione. Implementa il Controllo degli Accessi Basato sui Ruoli (RBAC) per garantire che gli utenti abbiano accesso solo alle risorse e alle azioni per le quali sono autorizzati a eseguire. Per maggiori informazioni, puoi fare riferimento a CIAM 102: Autorizzazione & Controllo degli accessi basato sui ruoli.

Implementare l'Autenticazione Multi-Fattore (MFA)

L'Autenticazione Multi-Fattore (MFA) aggiunge un ulteriore livello di sicurezza richiedendo agli utenti di fornire uno o più modi di identificazione, come una password e un codice a tempo inviato al loro dispositivo mobile. Un altro buon esempio di MFA è quando GitHub chiede agli utenti di inserire un codice a tempo dall'app mobile, che viene visualizzato nella pagina web, per eseguire operazioni sensibili come la cancellazione di un repository.

Tuttavia, avere un MFA non è una necessità per la maggior parte delle startup iniziali, soprattutto se non hai una soluzione pronta all'uso. Può essere eccessivo e avere un impatto negativo sulla tua esperienza utente.

Cultura

I consigli forniti sopra coprono per lo più le "misure di sicurezza passive", che sono note prima che si verifichi un incidente di sicurezza. Tuttavia, ci sono anche "misure di sicurezza attive" che puoi prendere per migliorare la tua postura di sicurezza generale, che sono più efficaci a lungo termine.

Educa il tuo team e gli utenti su phishing e ingegneria sociale

Gli attacchi di phishing e l'ingegneria sociale sono critici perché possono rendere inutili molte delle misure di sicurezza menzionate sopra. Ad esempio, se un utente viene ingannato a cedere la sua password o a cliccare su una foto apparentemente innocua di un gatto che contiene malware, la forza del tuo algoritmo di hash delle password o le regole del firewall diventano irrilevanti.

La maggior parte delle persone trova noiosa la formazione sulla sicurezza, e spesso lo è. Quindi, cambia il modo in cui educa il tuo team e gli utenti. Ad esempio, puoi simulare un'email di phishing prima che un aggressore lo faccia e dimostrare come identificarla. Puoi anche offrire ricompense per la segnalazione dell'email al team di sicurezza.

Configura DevSecOps

Oltre alle revisioni manuali di sicurezza, puoi also implementare pratiche DevSecOps per automatizzare i controlli di sicurezza. Ad esempio, puoi configurare un pipeline CI/CD per eseguire strumenti di analisi del codice statico come CodeQL e eseguire automaticamente test di penetrazione utilizzando strumenti come OWASP ZAP.

Adotta la configurazione più rigorosa senza impattare l'esperienza utente

Quando si tratta di sicurezza, scegli sempre la configurazione più sicura che non influisce negativamente sull'esperienza utente. Evita di prendere scorciatoie o di compromettere la sicurezza per comodità. La sicurezza dovrebbe essere sempre una priorità.

Come startup o sviluppatore indie, potresti sentire che ti mancano le risorse necessarie per implementare queste misure. Tuttavia, ci sono servizi di sicurezza professionali disponibili che offrono opzioni gratuite o adatte alle startup. Prenditi il tempo per rivedere e considerare di utilizzarli.

Conclusione

La sicurezza è un argomento complesso, e non è possibile coprire tutto in un solo articolo. Speriamo che questo articolo ti abbia aiutato a costruire un senso più forte di sicurezza per te stesso o per il tuo team. Se stai sviluppando una nuova app, potrebbe interessarti anche Logto, una piattaforma che ti aiuta a sviluppare, gestire e proteggere con il minimo sforzo le identità degli utenti del tuo prodotto.