API REST: la messa in sicurezza della prima chiamata con un CAPTCHA ha senso?

4

Diciamo che ho un'app iOS / Android che si basa su un'API REST personalizzata per cose come la gestione degli account (registrazione, login, reimpostazione della password, acquisizione / impostazione dei dati relativi all'utente).

Non c'è un buon modo per garantire che la mia API venga chiamata solo dalla mia applicazione mobile. Oauth2 e simili con 'secret' nel codice cliente possono essere facilmente modificati in retromarcia.

Diciamo che ho una chiamata API come questa:
link

Questo crea un nuovo utente e da quel momento in poi tutte le chiamate API includeranno un token di sessione o qualcosa che lega la chiamata API a un utente specifico dell'app con un account.

Questa prima registrazione è l'unica che non è protetta da nulla e ciò di cui sono preoccupato è che un malintenzionato lo chiama 1000.000 volte da uno script PC per creare molti utenti falsi, specialmente con indirizzi email reali. Quindi le persone con questi indirizzi non saranno in grado di utilizzare l'app.

Come posso proteggere la primissima chiamata dell'API per prevenire l'abuso di massa? Sto pensando di includere un CAPTCHA ottimizzato per dispositivi mobili convalidato dal server nel modulo di registrazione dell'utente.

Ancora una volta, tutte le successive chiamate API sono protette con token di sessione e conteggio chiamate API monitorato per utente (quelli sospetti sono bloccati).

Si tratta di progettare l'API in modo tale che, anche se utilizzato da un client intrinsecamente pericoloso come un telefono cellulare, è ancora valido. Fondamentalmente, anche se l'API dovesse essere resa completamente pubblica, nessuno potrebbe sbagliarla. Quindi qui la domanda si concentra sulla protezione della prima chiamata API, ma riguarda anche la risoluzione di un problema più generale.

Sembra che altre alternative interessanti includano l'uso della convalida della posta elettronica o un solido fornitore di identità di terze parti come Google e simili. Nessuna di queste 3 opzioni è perfetta. Ad ogni modo, è interessato alla discussione su questo argomento.

Ha senso? Sto complicando troppo le cose?

    
posta MikaelW 11.08.2014 - 13:21
fonte

1 risposta

5

L'approccio standard a questo sarebbe quello di inviare via e-mail l'utente per confermare l'account e se questo non si verifica in un periodo predefinito di tempo, per eliminare la registrazione.

Potresti combinare questo con alcuni rilevamenti di anomalie, ad esempio se hai un numero elevato di registrazioni da un singolo indirizzo IP potresti presumere che questo è ostile e bloccare quell'indirizzo IP. Non perfetto contro un determinato attaccante, ma potrebbe scoraggiare quelli meno determinati.

Potresti anche aggiungere qualcosa come un CAPTCHA al processo di registrazione, ancora una volta questo potrebbe scoraggiare gli attaccanti meno determinati ma ci sono un certo numero di modi per aggirarli, come i servizi di completamento CAPTCHA che sono relativamente poco costosi, quindi un determinato attaccante potrebbe aggirarli .

Quali di questi sono ragionevoli dipende in gran parte dal profilo di rischio / minaccia della tua applicazione.

    
risposta data 11.08.2014 - 17:56
fonte

Leggi altre domande sui tag