Perché dovrei nascondere le chiavi API?

5

Ho bisogno di integrare la mia app Android con Dropbox, in pratica tutto quello che voglio è che l'utente scelga un file dalla sua casella personale e lo dia alla mia app. Per farlo, sto utilizzando dropboxChooserSDK e richiede una chiave API per accedere a Dropbox.

Dal mio primo istinto dovevo cercare su come nascondere la chiave. Guardando in profondità in ho notato che non esiste un proiettile d'argento per risolvere il problema (avrei dovuto aspettarmelo tanto).

D'altra parte non sembra che ci sia molto danno nell'avere la chiave della tua casella dropbox esposta al mondo, dato il prupo della chiave come spiegato nel loro documentazione di riferimento :

If you're building a developer tool on top of Dropbox, your developers will need their own Dropbox app keys

While we encourage developers to use our official SDKs and libraries, we know there are a lot of different approaches to building frameworks and APIs. Regardless of how an app makes use of the Dropbox Platform, we need to know what that app is so we can let users know which apps are accessing their data. For that reason, if you provide software or services that wrap the Dropbox Platform for other developers to use, those developers must still sign up for their own Dropbox app key.

Ma questo mi ha fatto riflettere, sulla domanda, quanto impegno dovrei mettere per nascondere le mie chiavi API? La mia intuizione mi dice di usare un calcolo del back of envelope per stimare i trade-off dei costi / benefici individualmente, ma ho anche letto qui che è in corso una discussione su tali problemi (anche se non sono riuscito a trovarli).

Qual è l'intesa generale sulla protezione delle chiavi API?

    
posta Marcelo Lacerda 31.01.2017 - 17:45
fonte

1 risposta

7

Non so nulla di Dropbox in particolare, ma la mia comprensione delle chiavi API di altri provider di archiviazione come Google Drive, Amazon S3, ecc. è che consentono agli utenti di accedere tramite le loro app o tramite app di terze parti e vogliono essere in grado di monitorare quale è quale. La citazione nella domanda fa sembrare che questo riguardi la privacy: consentire agli utenti di sapere quali app accedono ai propri dati ed essere in grado di revocare le autorizzazioni su base app-per-app.

C'è spesso anche un angolo di fatturazione: Google Drive, ad esempio, offre un servizio gratuito direttamente agli utenti finali attraverso le proprie app, ma addebita alcuni $ / gb agli sviluppatori che vogliono sfruttare la loro infrastruttura all'interno di un altro prodotto. Spetta a loro che lo sviluppatore di app lo addebiti ai propri utenti tramite un abbonamento, o lo inghiotti semplicemente come un costo del business, dipende da loro.

Qui è dove arrivano le chiavi API: senza una chiave API, una richiesta in arrivo al server Dropbox è solo una richiesta; sai quale utente finale è perché hanno effettuato l'accesso, ma non hai modo di sapere se stanno usando la tua app o qualche app di terze parti e, in caso affermativo, a chi fatturare la larghezza di banda. Incorporando una chiave API nella tua app, stai collegando ogni richiesta che la tua app restituisce all'account di fatturazione dello sviluppatore.

Poiché i file Android .apk sono abbastanza facili da reingegnerizzare, un utente malintenzionato potrebbe estrapolare la tua chiave API, usarla nella sua app e otterresti il conto.

Lo sforzo di proteggere la chiave vale il rischio? Dipende da te. Se monitora frequentemente il tuo utilizzo o hai impostato un qualche tipo di protezione / allarme di utilizzo e sei sicuro di poter revocare rapidamente la chiave se le cose di pesce iniziano a verificarsi, allora probabilmente stai bene.

UPDATE: Come @ XiongChiamiov indica nei commenti, è necessario considerare anche l'interruzione del servizio se è necessario revocare la chiave. Supponiamo che inizi a visualizzare fatturazioni eccessivamente elevate o che colpisci il limite di utilizzo preimpostato. La tua risposta sarebbe probabilmente qualcosa di simile a:

  • scramble per implementare una migliore protezione delle chiavi API nella tua app
  • pubblica un aggiornamento per la sicurezza nel Play Store con un nuovo codice API
  • revoca il vecchio.

La funzione Dropbox della tua app non funzionerà finché gli utenti non aggiorneranno la loro app tramite Google Play. Ciò causerà sicuramente una certa confusione tra i tuoi utenti. Spetta a te decidere se questo è un rischio abbastanza grande da preoccuparti.

    
risposta data 31.01.2017 - 17:51
fonte

Leggi altre domande sui tag