2012-04-27 21 views
7

Nel mio caso sto usando l'API Dropbox. Attualmente sto memorizzando la chiave e il segreto in un file JSON, solo per poterlo gitignare e tenerlo fuori dal repository Github, ma ovviamente non è meglio che averlo nel codice dal punto di vista della sicurezza. Ci sono state molte domande sulla protezione/offuscamento di Python (solitamente per ragioni commerciali) e la risposta è sempre "No, Python non è pensato per quello".Come dovrei memorizzare le chiavi API in un'app Python?

Quindi, non sto cercando un modo per proteggere il codice ma solo una soluzione che mi consenta di distribuire la mia app senza rivelare i miei dettagli API.

+0

inserirli in un file di testo come valori crittografati. Crea una chiave di crittografia memorizzata privatamente, decifrala quando necessario. Potrebbe esserci un modo migliore, ma in questo modo ha funzionato bene per me in passato. –

+0

Se qualcuno esegue il programma sul proprio computer e il programma utilizza la chiave, viene praticamente divulgato. Non serve un genio per accendere WireShark, lasciare che il programma si connetta e filtrare l'acquisizione per le connessioni a dropbox (o qualche altro criterio - il caso peggiore che stai scavando attraverso alcune centinaia di pacchetti). E semplicemente offuscare il programma non ti comprerebbe nulla, dato che non puoi cambiare la stringa letterale che è la chiave API, o non sarebbe di alcuna utilità per il tuo programma. – delnan

+0

@delnan Ma la chiave API dovrebbe essere visibile nel traffico HTTP? Dropbox fa tutto su SSL. Non so se usano le variabili GET o POST o le inseriscono semplicemente nelle intestazioni della richiesta HTTP. Quelle cose sono criptate in una richiesta HTTPS o solo nel corpo della richiesta? – espekia

risposta

2

Testo normale. Qualsiasi tentativo di offuscamento è inutile se il codice viene distribuito.

2

Non so se questo è fattibile nel tuo caso. Ma puoi accedere all'API tramite un proxy che ospiterai.

Le richieste dall'APP Python vanno al proxy e il proxy effettua le richieste all'API Dropbox e restituisce la risposta all'app Python. In questo modo la tua chiave API sarà al proxy che stai ospitando. L'accesso al proxy può essere controllato con qualsiasi mezzo tu preferisca. (Per esempio username e password)

+0

In generale questa è una buona soluzione, ma nel mio caso ho scelto di utilizzare Dropbox in modo specifico perché non ho né le risorse né l'inclinazione ad ospitare il mio server, volevo solo concentrarmi sul client. – espekia

1

Ci sono due modi a seconda dello scenario:

Se si sta sviluppando un'applicazione web per gli utenti finali, Just Host in modo che la vostra chiave API non viene a divulgazione . Quindi, tenerlo gitignorato in un file separato e caricarlo solo sul tuo server dovrebbe andare bene (a patto che non vi sia alcuna violazione del tuo server). Qualsiasi offuscamento non aggiungerà alcun beneficio pratico, darà solo una falsa sensazione di sicurezza.

Se si sta sviluppando un framework/libreria per sviluppatori o un'applicazione client per utenti finali, chiedere loro di generare una chiave API per conto proprio.

Problemi correlati