2012-11-20 9 views
6

Ecco le mie esigenze:Come rendere privata la mia API ma utilizzabile dall'applicazione mobile?

  • utilizzabile da qualsiasi applicazione mobile Sono sviluppo

sto sviluppando l'applicazione mobile, quindi posso implementare le strategie di fissaggio.

  • Cacheable utilizzando la strategia di cache HTTP classica

sto usando vernice con una configurazione molto semplice e funziona bene

  • Non disponibile pubblicamente

I don' Voglio che le persone siano in grado di consumare la mia API

Solutions penso di:

  • Usa HTTPS, ma non copre gli ultimi requisiti perché proxying richiesta l'applicazione mostrerà il KEY API utilizzata.

Esiste la possibilità di farlo? Ad esempio, usare qualcosa come una chiave privata/pubblica?

Che si adatta bene con HTTP, Apache e Varnish.

+1

perché la gente continui a pensare questo è possibile? Ci devono essere oltre 1000 domande come questa su SO. Sono sbalordito. – rook

risposta

10

Non esiste alcun modo per garantire che l'altra estremità di un collegamento di rete sia l'applicazione. Questo non è un problema risolvibile. Puoi offuscare le cose con certificati, chiavi, segreti, qualunque cosa. Ma tutti questi possono essere decodificati dall'utente finale perché hanno accesso all'applicazione. Va bene usare un po 'di confusione come i certificati o simili, ma non può essere reso sicuro. Il tuo server deve presumere che chiunque si connetta ad esso è ostile e si comporta di conseguenza.

È possibile autenticare gli utenti , poiché possono disporre di account. In questo modo puoi sicuramente garantire che solo gli utenti validi possano utilizzare il tuo servizio. Ma non puoi assicurarti che usino solo la tua applicazione. Se la tua architettura attuale lo richiede, è necessario riprogettarlo. Non è risolvibile e sicuramente non risolvibile su piattaforme mobili comuni.

Se è possibile integrare un componente hardware sicuro, ad esempio una smart card, è possibile migliorare la sicurezza in quanto si può essere più sicuri che l'essere umano all'altro capo sia in realtà un cliente, ma anche questo non lo è garantire che l'applicazione sia quella che si collega al server, solo che la smartcard è disponibile per l'applicazione che si sta connettendo.

Per ulteriori informazioni su questo argomento, vedere Secure https encryption for iPhone app to webpage.

1

Anche se è vero, non c'è praticamente alcun modo per garantire che l'API venga utilizzata solo dai client a meno che non si utilizzi un elemento di hardware sicuro per archiviare il segreto (il che implicherebbe la creazione di un proprio telefono da zero, qualsiasi dispositivo esterno potrebbe essere usato da qualsiasi app client non ufficiale) ci sono alcune cose abbastanza efficaci che puoi fare per oscurare l'API. Per cominciare, usa HTTPS, è un dato di fatto. Ma la chiave qui è fare il pinning del certificato nella tua app.La pining del certificato è una tecnica in cui viene archiviato il certificato di chiave pubblica valido per il server HTTPS che si sta tentando di connettere. Quindi su ogni connessione, si convalida che si tratta di una connessione HTTPS (non accettare attacchi di downgrade) e, cosa più importante, convalidare che si tratta esattamente dello stesso certificato. In questo modo si impedisce a un dispositivo di rete nel tuo percorso di eseguire un uomo nell'attacco centrale, assicurando così che nessuno stia ascoltando la conversazione con il server. Facendo questo, ed essendo un po 'astuto nel modo in cui memorizzi i parametri generali dell'API nella tua applicazione (vedi confusione del codice, in particolare come offuscare le costanti di stringa), puoi essere abbastanza sicuro di essere l'unico a parlare al tuo server. Certo, la sicurezza è solo una funzione di quanto male qualcuno vuole infrangere la tua roba. Fare ciò non impedisce ad un esperto di reverse engineering di risparmiare tempo per provare (e possibilmente riuscire) a decompilare il codice sorgente e trovare quello che sta cercando. Ma fare tutto questo lo costringerà a guardare il binario, che è un paio di ordini di grandezza più difficili da fare che eseguire un uomo solo nell'attacco centrale. Questo è notoriamente legato all'ultima ondata di chat istantanee di immagini trapelate. Esistono client di terze parti per snapchat e sono stati creati mediante il reverse engineering dell'API, mediante uno sniffer che esamina il traffico durante un attacco uomo in mezzo. Se gli sviluppatori dell'app Snapchat fossero stati più intelligenti, avrebbero inserito il loro certificato nella loro app, garantendo assolutamente al server di Snapchat con chi stanno parlando, e gli hacker avrebbero bisogno di ispezionare il binario, un compito molto più laborioso che forse dato lo sforzo richiesto, non sarebbe stato eseguito.

Problemi correlati