Ho una API REST su un server e un'applicazione per telefoni Android che effettua principalmente chiamate a quell'api e presenta le informazioni all'utente.
Poiché l'applicazione deve essere un modo rapido per cercare informazioni pubbliche, è stato richiesto che non ci fosse alcun tipo di autenticazione da parte dell'utente finale.
Ora questo apre il server in cui l'API vive per attaccare. Non ci interessa che le informazioni vengano rubate impersonando un utente di app o qualcosa perché tutte le informazioni sono pubblicamente accessibili in entrambi i modi, ma un utente malintenzionato potrebbe, ad esempio, creare uno script per effettuare chiamate continue alla nostra API e sovraccaricare il server.
Quote e simili non possono essere utilizzati senza autenticazione e un carico di informazioni utente aggiuntivo sul database, l'agente utente può essere falsificato ... Alla fine la cosa più vicina a ciò di cui ho bisogno è stata trovata in questa risposta a una domanda simile , in cui è suggerito di memorizzare una chiave di accesso nella mia app e utilizzarla per effettuare chiamate alla mia API.
Ora ecco le mie domande sull'intera situazione e sicurezza:
- È implicito che se io uso HTTPS sono tutto impostato se includo semplicemente la chiave nelle intestazioni. Non c'è davvero modo di vedere questa chiave nella richiesta? (Sto usando HttpClient di Angular). L'URL del server di test è https ma, poiché sono in modalità di debug, posso vedere chiaramente tutte le informazioni della richiesta a livello di applicazione, l'applicazione in esecuzione sul mio telefono è al sicuro dagli hacker che guardano in qualche modo lo spazio di memoria dell'applicazione o così?
- Venendo dall'ultima domanda, qual è il modo migliore per archiviare questa app key all'interno dell'apk? Un file json, una stringa all'interno del codice angolare ...?
- Il server di prova è HTTPS, ma c'è qualche discussione sul rilascio del servizio API in un server secondario che è ancora HTTP. La risposta collegata implica che dovrei in qualche modo cancellare la chiave in qualche modo, ma non è disponibile per essere pescata fuori dalla richiesta? Sicuramente implicherebbe uno sforzo in più per mantenere la chiave hash modificata in modo che il server possa continuare a controllare che sia un hash della chiave originale, ma non diventa quindi questione di trovare l'algoritmo di hash nel codice? (È un buon posto per chiedere un hashing sicuro che possa essere implementato / usato in un'applicazione Angular?)
- C'è un altro modo per proteggere l'api in questa impostazione di cui non sono a conoscenza? Di nuovo, è fondamentalmente una API pubblica, ma abbiamo bisogno che sia accessibile solo da un'applicazione senza autenticazione dell'utente.