Proteggi l'accesso API API tramite hash nell'applicazione Android

Nell'applicazione Android, l'utente può submit contenuto al database, che può essere visto anche da tutti gli altri utenti.

Questo nuovo contenuto viene inviato al server tramite la richiesta GET:

  • Inizializzazione statica su OpenCV Android
  • Libreria Glide di Android non funzionante con le transizioni di elementi condivisi
  • Cattura della camera Android utilizzando FFmpeg
  • Android ottiene un elenco di colors dalla risorsa
  • Imposta applicazione specifica per ignorare l'ottimizzazione per codice in Android M
  • Come posso distriggersre il multi-touch e il tiro dalla mia attività
  • http://www.example.org/API.php?newContent=helloWorld 

    Il problema è: se un utente scopre cosa sembra questo URL, potrebbe facilmente submit richieste dannose nel suo browser e eludere l'applicazione Android. Forse si potrebbe decompilare l'applicazione e scoprire l'URL.

    Come posso proteggere l'accesso a questo URL e impedire agli utenti di accedere direttamente a questa API?

    È una buona soluzione per generare un hash nell'applicazione e confrontarlo con un hash generato nel file API.php sul server?

    Non è ansible capire come viene generato l'hash quando decompilano l'applicazione?

    Grazie mille in anticipo!

  • Le tabs personalizzate di Chrome non aprono altre applicazioni
  • Android okHttp addFormDataPart in modo dinamico per l'image multipla
  • Devo utilizzare sempre l'ultimo targetSdkVersion?
  • L'intestazione Content-Length è già presente
  • Android: ricevi tutte le notifiche per codice
  • Errore di eclipse di Android sul caricamento del file sul server
  • 4 Solutions collect form web for “Proteggi l'accesso API API tramite hash nell'applicazione Android”

    Quindi l'unico modo per proteggere veramente l'URL è richiedere che tutte le richieste siano autenticate.

    Un modo per farlo è modificare la tua richiesta a una richiesta POST e submit una sorta di token di authorization (un semplice hash farà) con la richiesta. Se il token di authorization non è presente, non rispondere semplicemente alla richiesta. L'hash sarebbe qualcosa che potresti codificare sia nel client che nel server.

    Ora la domanda è come hide il tuo token di authentication. Fintanto che non sei aperta per il tuo codice, l'unico modo per accedere a qualcuno sarebbe quello di decompilare il tuo programma come hai detto. Per evitare questo, si potrebbe desiderare di guardare utilizzando proguard (http://developer.android.com/guide/developing/tools/proguard.html).

    Qualcosa da tenere presente è che questo metodo contiene un singolo punto di fallimento. Se il tuo token di authorization è mai stato esposto, sei finito (ad esempio, il debacle chiave crittografica HD DVD AACS).

    Un altro modo per autenticare è su base utente. Fintanto che un utente valido sta facendo una richiesta, non dovresti veramente preoccuparti se la richiesta venisse o less dal browser web o da un'applicazione android. Penso che questo sia un modo molto migliore di fare le cose. In questo modo è ansible controllare le richieste su base utente. Ciò tuttavia richiede di gestire i profili utente e l'integer cane di worm che viene fornito con esso.

    Tutto quello che ha detto, alla fine del giorno anche se non dovresti veramente preoccuparti se qualcuno conosce l'url in una porzione della tua API. Non conosco il tuo caso di utilizzo particolare, ma c'è un modo per progettare la tua API in modo che non ti interessa come stai ricevendo le tue richieste. Inoltre, se il tuo fare un vero GET, allora non dovresti cambiare nulla sul server. Ciò significa che tutta la "persona maligna" può fare è get dati fuori di esso. Questo limita gravemente i danni che possono fare. Infatti, a less che non si dispone di dati sensibili che non si desidera che alcune persone guardino, non si ha davvero alcun problema. Se lo fai, allora dovresti davvero pensare alla mia soluzione di authentication per utente.

    Non fidatevi del client per la validation. Questo è vero se il suo javascript in un browser web o anche qualche piattaforma bloccata come l'Iphone.

    Se l'applicazione può effettuare chiamate API, chiaramente tutto ciò che serve per effettuare tali chiamate è sul telefono (segreto, function hash, tasto API, qualunque cosa), quindi qualcuno può sempre scaricare la memory del telefono e get tutti i dati. Possono quindi fare qualsiasi richiesta che vogliono.

    Quello che vuoi fare è autenticare l'utente e quindi validationre l'input sul lato server.

    Utilizza SSL (HTTPS) per i tuoi trasferimenti dati. Lo scambio è crittografato prima di submit tutti i dati, in modo che chiunque ascolta non sarà in grado di vedere né l'URL né i dati inviati al server. Per verificare questo per te, installa Wireshark sul tuo sistema di dev e carica l'URL in un browser. Non verranno visualizzati dati chiari (l'URL oi dati inviati tramite GET o POST).

    È ansible utilizzare un metodo java in qualche modo confusionale per ignorare each lettera dell'URL. Quindi tipo di creare il proprio dictionary in modo che potrebbe rendere l'URL ansible 123.3 * 15 * 13 o qualcosa del genere se qualcuno ha decompilato l'APK, non avrebbero idea. E su quella nota, preferirebbe usare Proguard per offuscare, in modo che il tuo obfuscio non avrebbe senso a qualcuno che cerca di invertire l'ingegnere.

    Potresti fare un breve metodo java come questo:

     public String confuseString() { Stringbuilder sb = new StringBuilder(); //your real URL would be abc.com, but in the app you have myURL = 123.3*15*13 //With what I'm saying the * would precede a 2 digit number that represents 1 letter for (int i = 0; i < stringLength; i++){ String letter = myURL.charAt(i); if (letter.equals("1"){ letter = a; sb.append(letter); } // you would go one to code each character into a letter } } 

    Ci sarebbero diverse altre dichiarazioni ovviamente, ma ti permetterebbero di ingannare il tuo url senza apportre modifiche sul lato server. E se utilizzi Proguard, allora l'integer metodo che hai creato non avrebbe assolutamente senso a qualcuno che cerca di invertire l'ingegnere.

    Potresti naturalmente rendere il tuo obfuscio molto più complicato di quello che ho suggerito, ma è comunque un'idea.

    Fondamentalmente si sarebbe crittografare l'URL in modo molto confuso.

    Ecco una risposta che potrebbe essere un metodo migliore di crittografia o alless dare una crittografia aggiuntiva:

    Java – crittografare / decifrare il nome utente e la password da un file di configuration

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.