2011-02-24 2 views
3

J'utilise GAE pour exécuter mon application. Mon application utilise un mot de passe pour connecter un service externe. Actuellement, je stocke ce mot de passe dans un fichier de propriétés de texte libre qui fait partie des sources. Parce que je partage mes sources dans git-hub mes mots de passe sont exposésGoogle App Engine - comment empêcher l'exposition des mots de passe

Y at-il un moyen de stocker ce genre d'informations sensibles dans la configuration/environnement GAE (en utilisant le portail admin) ou quelque chose comme ça. Je suppose que je peux stocker en quelque sorte dans le magasin de données, mais je suis à la recherche de quelque chose de plus simple comme heroku ENV solution

Répondre

5

Gardez un d séparé, .gitignore », fichier qui a versionnée vos mots de passe en elle (dire « private.py ») . Ensuite, ajoutez un exemple de version de ce fichier avec des valeurs d'espace réservé à votre source versionnée (par exemple, "private.py.sample").

+0

qui est la façon dont je le fais pour gérer les clés API privées utilisées pour contacter certaines API tiers – systempuntoout

+0

la vérité est que la situation est plus complexe: nous sommes 2 développeurs qui utilisent ce dépôt git. donc je veux que nous ayons tous les deux les mêmes sources (utiliser .gitignore est un peu problématique en collaborant). J'espérais que GAE prendrait en charge la configuration de l'application –

+2

Vous ne changez pas souvent vos mots de passe de service externe, n'est-ce pas? Donnez à l'autre développeur une copie du fichier avec juste les mots de passe, ayez-les '.gitignore' aussi, et vous n'aurez probablement plus jamais besoin de toucher à ce fichier. * Ne pas * mettre les mots de passe dans le même fichier de code que les autres options de configuration. – Amber

1
class AppConfig(db.Model): 
    pass = db.StringProperty() 

# ... 
cfg = AppConfig.get_by_key_name("MyFirstApplication") 
if cfg is None: 
    cfg = AppConfig(key_name="MyFirstApplication") 
    # this is initial run - request pass from user 
    cfg.pass = userInput 
    cfg.put() 
# here you can use your cfg.pass