2013-06-26 2 views
6

In PHP il modo accettato per proteggere le credenziali di accesso al database è archiviarle all'esterno della web root e ai file con le password include(). In che modo le credenziali di accesso al database MySQL vengono archiviate in modo sicuro nelle applicazioni Python?Come archiviare in modo sicuro la password del database in Python?

+0

Cosa averti scoperto finora? Analizzare le applicazioni PHP sembra inutile se si vogliono conoscere le pratiche in Python ai miei occhi. E per fortuna c'è un sacco di codice Python in giro, quindi cosa ha coperto la tua ricerca? – hakre

+1

Ho menzionato la best practice di PHP in quanto ambiente con cui ho familiarità. Per quanto riguarda Python, ho trovato solo suggerimenti per offuscare la password (base64 o simili) e per garantire che il file Python non sia leggibile da altri (autorizzazioni 0700). Chiedo qui se c'è un modo migliore. – dotancohen

+1

Uso la libreria keyring (https://pypi.python.org/pypi/keyring) e memorizzo le credenziali effettive nell'utility di memorizzazione delle credenziali del sistema operativo. È molto facile da implementare e mi sembra abbastanza sicuro. – northben

risposta

4

Bene, un modo per farlo è inserire le password in un file config/ini separato che è non distribuito con il progetto. E poi, passare il percorso di questo file per l'ingresso principale dell'applicazione, ad esempio:

python main.py --config=/path/to/config.ini

Si noti che è necessario analizzare questo argomento --config (vedi argparse) e quindi leggere e analizzare il config.ini file.

Aggiornamento: Dal momento che lei ha citato le applicazioni web, c'è anche un altro modo di passare le informazioni di configurazione - attraverso il environ. Per esempio, se si utilizza mod_wsgi, è possibile putt questo nelle direttive WSGI:

SetEnv my_namespace.some_param some_value

E poi, questo valore sarà accessibile in applicazione con attraverso os.environ:

import os 
os.environ['my_namespace.some_param']