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?