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?