Le API (Web Application Programming Interface) forniscono il back-end per le moderne applicazioni web e mobili. Le chiamate alle API Web rappresentano oltre l ‘ 80% di tutto il traffico Web e i criminali informatici prendono sempre più di mira le API, quindi garantire la sicurezza delle API Web è fondamentale. Le API REST sono il tipo più comune di API Web per i servizi Web. Vediamo cosa puoi fare per garantire la sicurezza delle API REST.
- Che cos’è un’API REST?
- Due livelli di sicurezza API REST
- Garantire un accesso API sicuro
- Sicurezza della connessione
- API Access Control
- Autorizzazione utente con chiavi API
- Restrizioni client API
- Protezione delle applicazioni che espongono API
- Dati sensibili nella comunicazione API
- Content Type Validation
- Intestazioni di sicurezza di risposta
- Convalida dell’input
- Perché la sicurezza delle API REST è importante
- Informazioni sull’autore
Che cos’è un’API REST?
REST (abbreviazione di REpresentational State Transfer) è uno stile di architettura software per lo sviluppo web, solitamente utilizzato con la comunicazione HTTP. Le API RESTful (o semplicemente API REST) sono interfacce di programmazione delle applicazioni che seguono i principi REST, consentendo ai client Web e ai server di interagire con un’enorme varietà di risorse Web. Le API REST utilizzano verbi HTTP standard (metodi) e codici di stato per fornire un certo livello di standardizzazione. Sono accessibili tramite URL HTTP e sono ampiamente utilizzati per i servizi web.
Nota: Le API REST sono stateless come il protocollo HTTP stesso, il che significa che non memorizzano alcuna informazione sulle connessioni o sulle sessioni correnti. I servizi Web RESTful forniscono modi per accedere e manipolare le risorse, mentre la gestione delle sessioni deve essere gestita dall’applicazione.
Due livelli di sicurezza API REST
Prima di entrare nei dettagli tecnici, c’è una cosa importante da notare. Un’API Web espone un’interfaccia a un’applicazione Web, quindi è necessario pensare alla sicurezza su due livelli: l’accesso all’API e quindi l’accesso all’applicazione.
A livello di API, è necessario l’autenticazione corretta, l’autorizzazione, i privilegi di accesso e così via, per garantire che solo i client consentiti possano utilizzare l’interfaccia ed eseguire solo le operazioni consentite. A livello di applicazione, è necessario assicurarsi che gli endpoint dell’applicazione (gli URL utilizzati per accedere all’interfaccia) non siano vulnerabili agli attacchi che attraversano l’interfaccia o la ignorano.
Vediamo come è possibile garantire la sicurezza delle API REST su questi due livelli. Per una discussione dettagliata delle best practice di sicurezza API, vedere il Cheat Sheet OWASP REST Security.
Garantire un accesso API sicuro
La maggior parte delle API Web sono esposte a Internet, quindi hanno bisogno di meccanismi di sicurezza adeguati per prevenire abusi, proteggere i dati sensibili e garantire che solo gli utenti autenticati e autorizzati possano accedervi.
Sicurezza della connessione
La sicurezza inizia con la connessione HTTP stessa. Le API REST sicure devono fornire solo endpoint HTTPS per garantire che tutte le comunicazioni API siano crittografate utilizzando SSL / TLS. Ciò consente ai client di autenticare il servizio e protegge le credenziali API e i dati trasmessi.
API Access Control
Molte API Web sono disponibili solo per gli utenti autenticati, ad esempio perché sono private o richiedono la registrazione o il pagamento. Poiché le API REST sono stateless, il controllo degli accessi viene gestito dagli endpoint locali. I metodi di autenticazione API REST più comuni sono:
- Autenticazione HTTP Basic: le credenziali vengono inviate direttamente nelle intestazioni HTTP nella codifica Base64 senza crittografia. Questo è il metodo di autenticazione più semplice e il più facile da implementare. E ‘ anche il meno sicuro, dal momento che i dati riservati vengono trasmessi come testo normale, quindi dovrebbe essere utilizzato solo in combinazione con HTTPS.
- JSON Web Tokens (JWT): Le credenziali e altri parametri di accesso vengono inviati come strutture dati JSON. Questi token di accesso possono essere firmati crittograficamente e sono il modo preferito per controllare l’accesso alle API REST. Vedere il Cheat Sheet OWASP JWT per una rapida panoramica dei token Web JSON e RFC 7519 per le specifiche complete.
- OAuth: i meccanismi standard OAuth 2.0 possono essere utilizzati per l’autenticazione e l’autorizzazione. OpenID Connect consente l’autenticazione sicura su OAuth 2.0. Ad esempio, le API di Google utilizzano OAuth 2.0 per l’autenticazione e l’autorizzazione.
Autorizzazione utente con chiavi API
Le chiavi API forniscono un modo per controllare l’accesso ai servizi REST pubblici. Gli operatori di servizi Web pubblici possono utilizzare le chiavi API per applicare la limitazione della velocità per le chiamate API e mitigare gli attacchi denial-of-service. Per i servizi monetizzati, le organizzazioni possono utilizzare le chiavi API per fornire l’accesso in base al piano di accesso acquistato.
Restrizioni client API
Per ridurre al minimo i rischi per la sicurezza, gli operatori del servizio REST devono limitare la connessione dei client alle funzionalità minime richieste per il servizio. Ciò inizia con la limitazione dei metodi HTTP supportati per assicurarsi che i client mal configurati o dannosi non possano eseguire alcuna azione oltre le specifiche API e il livello di accesso consentito. Ad esempio, se l’API consente solo le richieste GET, POST e altri tipi di richiesta devono essere rifiutati con il metodo response code 405 non consentito.
Protezione delle applicazioni che espongono API
Una volta che il client ha accesso legittimo, è necessario proteggere l’applicazione Web sottostante da input malformati e dannosi. Le chiamate e le risposte alle API REST possono anche includere dati riservati che devono essere controllati.
Dati sensibili nella comunicazione API
Le chiamate API spesso includono credenziali, chiavi API, token di sessione e altre informazioni sensibili. Se inclusi direttamente negli URL, questi dettagli potrebbero essere memorizzati nei log del server Web e trapelati se i registri sono accessibili dai criminali informatici. Per evitare perdite di informazioni riservate, i servizi Web RESTful dovrebbero sempre inviarli nelle intestazioni delle richieste HTTP o nel corpo della richiesta (per le richieste POST e PUT).
Content Type Validation
Continuando il tema delle restrizioni del client API, i servizi REST dovrebbero definire con precisione i tipi di contenuto consentiti e rifiutare le richieste che non hanno le dichiarazioni corrette nelle loro intestazioni HTTP. Ciò significa specificare attentamente i tipi consentiti nell’intestazione Content-Type
e Accept
, insieme al set di caratteri (ove possibile). Se il servizio include JavaScript (o altro codice di script), dovrebbe assicurarsi che il tipo di contenuto nell’intestazione sia lo stesso del corpo della richiesta, ad esempio application/javascript
. Questo aiuta a prevenire attacchi di iniezione di intestazione.
Intestazioni di sicurezza di risposta
È possibile impostare ulteriori intestazioni di sicurezza HTTP per limitare ulteriormente il tipo e l’ambito delle richieste. Questi includono X-Content-Type-Options: nosniff
per prevenire gli attacchi XSS basati sullo sniffing MIME e X-Frame-Options: deny
per prevenire i tentativi di clickjacking nei browser meno recenti.
Se il servizio non supporta le chiamate cross-domain, dovrebbe disabilitare CORS (condivisione delle risorse cross-origin) nelle sue intestazioni di risposta. Se sono previste tali chiamate, le intestazioni CORS dovrebbero specificare con precisione le origini consentite.
Convalida dell’input
Le API sono progettate per l’accesso automatizzato senza interazione dell’utente, quindi è particolarmente importante garantire che tutti gli input siano validi e attesi. Eventuali richieste non conformi alle specifiche API devono essere rifiutate. Si applicano le linee guida tipiche delle best practice per la convalida degli input:
- Trattare tutti i parametri, gli oggetti e altri dati di input come non attendibili.
- Utilizzare la funzionalità di convalida integrata se disponibile.
- Controlla la dimensione della richiesta, la lunghezza e il tipo del contenuto.
- Utilizzare la digitazione forte per i parametri API (se supportato).
- Per impedire SQL injection, evitare di creare query manualmente – utilizzare invece query parametrizzate.
- Whitelist valori dei parametri e ingressi stringa, ove possibile.
- Registra tutti gli errori di convalida degli input per rilevare i tentativi di riempimento delle credenziali.
Perché la sicurezza delle API REST è importante
Le API Web sono la spina dorsale del moderno sviluppo web e mobile. Consentono ad applicazioni e servizi di comunicare e scambiare dati tra piattaforme hardware e software. Mentre altri formati API sono ancora in uso (ad esempio SOAP), le API REST sono ora il tipo dominante, rappresentando oltre l ‘ 80% di tutte le API Web pubbliche. Forniscono il back-end per la maggior parte delle applicazioni mobili e dei dispositivi IoT e consentono una facile integrazione tra sistemi e applicazioni.
Poiché utilizzano le stesse tecnologie delle applicazioni Web, le API REST possono essere vulnerabili agli stessi attacchi. Allo stesso tempo, le API non sono progettate per l’accesso manuale, quindi possono essere difficili da testare, specialmente se alcuni endpoint e funzionalità non sono documentati. I test di sicurezza API richiedono strumenti automatizzati accurati per garantire una copertura completa. Netsparker fornisce pieno supporto per la scansione delle vulnerabilità REST API con una varietà di metodi di autenticazione e riscrittura automatica degli URL.
Consultare la documentazione del sito di test API REST di Netsparker per i dettagli tecnici completi e leggere il nostro articolo completo sulla scansione delle API REST per le vulnerabilità con Netsparker.
Informazioni sull’autore
Autore di contenuti tecnici su Netsparker. Basandosi sulla sua esperienza come giornalista IT e traduttore tecnico, fa del suo meglio per portare la sicurezza web a un pubblico più ampio sul blog e sul sito web di Netsparker.