19 best practice sulla sicurezza API da implementare e garantire la sicurezza

La sicurezza delle API è uno degli aspetti più importanti di cui devi occuparti in quasi tutte le applicazioni.

Al giorno d’oggi, le API sono il modo migliore per integrare la tua applicazione con altre applicazioni. Forniscono un gateway per la tua applicazione e, pertanto, le API devono essere sufficientemente sicure da non ricevere visitatori indesiderati.

Diamo un’occhiata ad alcune vulnerabilità API che possono rappresentare una minaccia per la tua applicazione.

Vulnerabilità API comuni

#1. Scripting cross-site (XSS)

Gli attacchi XSS sono comuni nelle applicazioni Web ma possono verificarsi anche tramite API se i dati utente in entrata non vengono adeguatamente disinfettati. Gli aggressori possono eseguire script dannosi sul server e ottenere l’accesso a dati sensibili.

#2. Violazione del limite di velocità

La violazione della funzionalità di limitazione della velocità dell’API può dare agli aggressori la possibilità di bombardare il tuo server con un numero enorme di richieste. Alla fine, il server potrebbe bloccarsi e la tua base clienti potrebbe avere difficoltà a raggiungerti.

#3. Autenticazione impropria

Se l’API non è configurata correttamente utilizzando un metodo di autenticazione affidabile, qualsiasi terza parte può accedere al tuo sistema tramite l’API. L’autorizzazione è importante anche perché definisce chi può accedere a quale risorsa API fino a un periodo di tempo specificato.

#4. Trasmissione dati non sicura

I dati inviati ai consumatori della tua API devono essere crittografati lungo il percorso. In caso contrario, è possibile che i dati vengano divulgati da hacker che utilizzano un attacco man-in-the-middle. Ecco perché è sempre consigliabile utilizzare un protocollo sicuro come HTTPS per trasmettere i dati.

#5. Dipendenze deprecate/obsolete

Le API hanno molte dipendenze esterne che vengono utilizzate per eseguire attività complesse e per scaricare parte della logica complessa. Se tali dipendenze presentano una vulnerabilità, indirettamente, anche la tua API diventa vulnerabile. Assicurati sempre di aggiornare le versioni delle dipendenze.

Ora che conosci le vulnerabilità dell’API, diamo un’occhiata ad alcune best practice per proteggere la tua API.

Leggi anche: Le migliori alternative a Postman per testare l’API per sviluppatori

Sicurezza API: best practice

Controllo delle versioni dell’API

È fondamentale monitorare e aggiornare regolarmente le tue API con dipendenze aggiornate, poiché tali dipendenze potrebbero contenere importanti vulnerabilità. Puoi avvisare gli utenti API rilasciando una versione patch dell’API in base al versione semantica.

Mantenere aggiornata la tua API è il minimo che puoi fare per evitare che venga sfruttata dagli aggressori.

Autenticazione

Esistono diversi modi in cui puoi autenticare un utente API. Il modo più semplice è utilizzare l’approccio nome utente/password, ma è troppo semplice e si basa solo sulla forza della password.

Un altro modo è utilizzare le chiavi API per accedere all’API. Puoi fornire a ciascun utente API una chiave univoca che può utilizzare.

L’autenticazione JWT è una tecnica in cui le credenziali dell’utente vengono convertite in un token firmato digitalmente e quindi inviate all’utente. L’utente invia quindi lo stesso token su ogni richiesta al server affinché il server possa convalidare. Anche i JWT hanno una data di scadenza.

La soluzione più efficace è OAuth. Consente l’accesso di terze parti all’API con credenziali di accesso già esistenti. Ad esempio, se hai già effettuato l’accesso a Google, un’applicazione può utilizzare tali credenziali per accedere al tuo account senza bisogno di una password. Il tuo account Google diventa la password.

Autorizzazione

L’autorizzazione è una cosa diversa dall’autenticazione. Mentre autorizzi un utente, questi è già autenticato per utilizzare la tua API ed è solo la risorsa API a cui può accedere.

Ad esempio, un professore universitario può avere accesso a tutti gli studenti in un batch, ma un singolo studente può accedere solo ai propri dati. In questo caso lo studente e il professore sono autenticati sullo stesso sistema ma sono autorizzati a compiere solo determinate azioni.

Garantire il corretto funzionamento dell’autorizzazione API può impedire l’accesso non autorizzato a una risorsa.

Redazione dei dati

La redazione dei dati è il processo di rivelazione selettiva di informazioni agli utenti e di protezione delle informazioni sensibili. Un’autorizzazione adeguata può portare a una migliore redazione dei dati. Anche le normative sulla privacy dei dati come il GDPR si basano sulla redazione dei dati. Qualsiasi terza parte indesiderata non dovrebbe essere in grado di sbirciare dati personali o sensibili.

È possibile implementare la reazione dei dati implementando un middleware o un gestore gateway.

Crittografia

Questo è diventato il controllo di sicurezza più importante nel mondo di oggi. La crittografia è necessaria se hai a che fare con qualsiasi tipo di informazione sensibile. La crittografia minima che puoi eseguire è utilizzare il protocollo HTTPS, che utilizza l’handshake TLS (Transport Layer Security) e SSL (Secure Socket Layer).

La crittografia end-to-end è un altro modo per proteggere saldamente i dati in transito. Anche i dati archiviati nel database dovrebbero essere crittografati nel caso in cui un utente malintenzionato possa riuscire a penetrare nel database e accedere ai dati.

Gestione degli errori

Le informazioni sull’infrastruttura dell’applicazione possono essere divulgate agli aggressori tramite messaggi di errore dettagliati. Per evitare ciò, mantieni i messaggi di errore generici e implementa una gestione degli errori personalizzata. Assicurarsi che nei dettagli dell’errore non vengano registrate informazioni sensibili sul sistema.

Convalida degli input e sanificazione dei dati

La convalida dell’input è estremamente cruciale quando si ha a che fare con le API perché non si conosce l’input finché l’utente non lo invia.

La sanificazione è il processo di rimozione di qualsiasi codice eseguibile indesiderato dal payload. Un utente malintenzionato può inserire uno script Javascript e, se non lo ripulisci prima di passarlo al tuo HTML, verrà eseguito come script e recupererà i dati.

Una sanificazione impropria può portare ad attacchi Cross-site scripting (XSS).

Sistemi di rilevamento delle intrusioni

Conosciuti anche come IDS, i sistemi di rilevamento delle intrusioni aiutano a monitorare e rilevare il traffico di rete in arrivo all’API. Se rileva comportamenti insoliti nel traffico, può registrare e avvisare le autorità interessate.

In generale, esistono due tipi di sistemi: basati su rete e basati su host. Nei sistemi basati su rete, il sistema è distribuito tra diversi checkpoint per monitorare il traffico in più punti. In un sistema basato su host, viene distribuito su un singolo host.

Tali sistemi sono un ottimo modo per determinare chi sta tentando di accedere alla tua rete prima che ostacolino i tuoi dati.

Whitelist IP

La whitelist IP è un modo per consentire solo agli indirizzi IP selezionati di accedere alla tua API e alla tua rete. Questa tecnica potrebbe non funzionare se disponi di un’API pubblica perché è troppo complesso elencare tutti gli IP.

È utile sapere che solo alcune applicazioni dei sistemi accederanno alla tua API.

Token Web JSON

I JWT vengono generalmente utilizzati per autenticare un utente inviando all’utente un token firmato digitalmente creato dalle sue credenziali. Funziona perché nasconde le credenziali effettive dell’utente e inoltre non è necessario archiviare le credenziali nel database o sul lato utente.

Il JWT può essere diviso in tre sezioni: intestazione, payload e firma. La sezione payload contiene le credenziali dell’utente e l’intestazione può contenere informazioni come l’algoritmo utilizzato. La sezione firma viene firmata digitalmente dal server e dal client ad ogni richiesta successiva.

I JWT generalmente hanno una data di scadenza, dopo la quale un nuovo token viene generato dal server e quindi inviato all’utente.

Registrazione e monitoraggio

Monitorare il traffico verso la tua API può essere utile per rilevare e identificare in anticipo i visitatori indesiderati. Puoi monitorare ogni singola richiesta, ma assicurati che i log non contengano informazioni sensibili.

Limitazione della velocità

Se un’API non implementa la limitazione della velocità, è vulnerabile agli attacchi DDoS a causa dell’afflusso imprevisto di traffico di rete. Gli aggressori possono inondare il sistema con un numero enorme di richieste in un breve lasso di tempo, provocando infine il crash del server.

Le API di limitazione e limitazione della velocità evitano attacchi di tipo Denial of Service limitando il flusso del traffico API.

Dipendenze sicure

Le vulnerabilità non emergono solo dal codice API, ma possono anche far parte di eventuali dipendenze di terze parti che potresti utilizzare nella tua API. Ecco perché è importante monitorare e scansionare regolarmente le tue dipendenze e rilevare eventuali vulnerabilità che potrebbero essere presenti in esse.

È possibile implementare un processo pianificato per scansionare e aggiornare regolarmente le dipendenze se possono essere aggiornate con una versione patch che risolve la vulnerabilità. Inoltre, scegli dipendenze più sicure e fornisci frequenti aggiornamenti di sicurezza.

Le intestazioni di sicurezza dovrebbero essere restituite con la risposta API per istruire il browser sulla sicurezza dell’API e su come dovrebbe agire. Le intestazioni importanti che puoi inviare per migliorare la sicurezza sono:

  • Controllo cache: impostalo su no-store per evitare di memorizzare informazioni sensibili nel browser.
  • Content-Security-Policy: impostandolo su frame-antencestors ‘none’ si evita di inquadrare le risposte API in un iframe.
  • Content-Type: questa intestazione è importante perché senza di essa il browser tenta di indovinare il tipo di risposta API e ciò può portare ad attacchi di sniffing. Per la risposta JSON, puoi impostarlo su application/json.
  • X-Content-Type-Options: impostalo su nosniff per indicare al browser di non indovinare il tipo MIME della risposta e di cercarlo solo nell’intestazione Content-Type.

Standard e framework di sicurezza

Progetta la tua API con l’aiuto di standard e framework di sicurezza predefiniti per garantire che la tua API sia aggiornata con le ultime considerazioni sulla sicurezza.

Scadenza del token

Se utilizzi token al portatore, il tempo di scadenza del token dovrebbe essere di breve durata perché richiede la riautenticazione dell’utente, il che è positivo. In JWT, di solito ci sono due token: token di accesso e token di aggiornamento. I token di aggiornamento sono di lunga durata, mentre i token di accesso sono di breve durata. In ogni caso, i tuoi token dovrebbero avere una scadenza.

Firewall per applicazioni Web

Un WAF, alias Web Application Firewall, è un gateway che monitora, filtra e blocca qualsiasi traffico di rete dannoso. Spesso è il modo migliore per prevenire attacchi dannosi tramite il protocollo HTTP.

Utilizzo dei gateway API

Se desideri configurare facilmente la sicurezza API e gestire i percorsi API e il relativo accesso, puoi scegliere i gateway API. Forniscono inoltre strumenti di monitoraggio, registrazione e analisi che puoi utilizzare per monitorare la tua API.

Zero Trust

L’idea alla base della strategia zero trust è quella di non fidarsi di alcuna fonte centralizzata. La sicurezza dovrebbe essere stratificata e implementata in più punti di controllo.

Fondamentalmente non ci si può fidare di nessuno, nemmeno degli sviluppatori che lavorano sull’API. Ogni gateway dovrebbe essere monitorato e analizzato per prevenire violazioni della sicurezza.

L’automazione è utile in questi casi. Puoi utilizzare strumenti automatizzati per monitorare e bloccare regolarmente attività insolite o sospette.

Parole finali

Puoi solo fare molto per mantenere le tue API sicure. Ci sono sempre alcune lacune nel software che possono essere sfruttate. Tali scappatoie si traducono in vulnerabilità zero-day. Quindi, per proteggere le tue API, il minimo che puoi fare è mantenerle aggiornate con gli standard di sicurezza più recenti.

Dai un’occhiata ai migliori strumenti di test dinamici della sicurezza delle applicazioni.