Limitazione delle ricerche nel database tramite metadati di token

1

Ho un'app. Dopo aver effettuato correttamente il login, gli utenti ricevono un token di autenticazione jwt che contiene vari dati e scade tra 30 min. È necessario un token valido affinché l'app possa chiamare varie funzioni di back-end e accedere alle risorse del database. Tuttavia, una volta verificato il token, le funzioni di back-end non impongono ulteriori vincoli di sicurezza. Ho paura che questo possa comportare il seguente attacco:

1) Gli hacker creano un account utente valido (con informazioni bs) ed eseguono l'accesso. Ora hanno un token valido.

2) Usando quel token, poi manipolano varie richieste al back-end: E.g. forniscono un ID utente di altre parti nel corpo della richiesta e di conseguenza sono in grado di accedere alle risorse di back-end come se fossero quell'utente.

Esempio concreto

Esiste una funzione di back-end chiamata deleteUser . Elimina l'utente associato all'ID utente passato nel corpo della richiesta https. Prima di essere chiamato, la funzione convalida il token, ma non controlla se il token corrisponde al userId nel corpo della richiesta. Passando un token associato a un utente_A e un id che corrisponde a user_B, potrò utilizzare il token user_A per eliminare user_B.

La soluzione semplice

Verifica che i metadati del token corrispondano ai parametri passati nel corpo della richiesta. Tuttavia, questo non è sempre semplice. A volte le informazioni trasmesse nel corpo della richiesta sono diverse fasi rimosse dai dati contenuti nel token dell'utente. Per esempio. una funzione deleteProperty richiede un property_id nel corpo della richiesta, ma per verificare che il property_id in questione si riferisca ai metadati del token di autenticazione richiederebbe costose operazioni di database - questo rallenta l'app e aumenta il carico computazionale sui server.

Esiste un nome per questo tipo di attacco? Qual è il modo consigliato per fermarlo? Ci sono soluzioni migliori di quelle che ho delineato sopra?

    
posta Logister 26.11.2017 - 21:29
fonte

1 risposta

2

Questo è ciò che l'ultima lista OWASP chiama "Broken Access Control". Stai richiedendo l'autenticazione, ma non verificando che l'utente abbia il permesso di accedere alla risorsa.

In realtà non hai altre opzioni se non quella di verificare che l'utente disponga delle autorizzazioni appropriate. Ciò significa che dopo aver convalidato il token, dovrai leggere il valore dell'ID utente e passarlo nelle funzioni che operano sui dati.

A seconda della lingua o del framework, potresti anche avere un metodo conveniente per accedere all'ID utente autenticato tramite un altro meccanismo.

Se rallenta l'applicazione o aumenta il carico, così sia. L'alternativa è quella di filtrare i dati con una semplice manipolazione dei parametri del corpo della richiesta o dell'URL.

Assicurati inoltre di proteggere le funzioni a livello di amministratore con le attestazioni appropriate nel JWT.

    
risposta data 26.11.2017 - 22:07
fonte

Leggi altre domande sui tag