Que doit-on cacher dans son setting.py?

Faille de sécurité sur projet Open-Source

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je viens de voir que le ZdS laisser sur son repository la clef secrète de Django:

1
2
# Make this unique, and don't share it with anybody.
SECRET_KEY = 'n!01nl+318#x75_%le8#s0=-*ysw&y49uc#t=*wvi(9hnyii0z'

J'ai toujours fait attention de mon côté a la supprimer avant de push et a l'ajouté avec mon script de pull.. Alors la question est la suivante:

Quels sont les éléments devant être supprimer avant un commit de manière a préserver la sécurité de notre plateforme?

Moi je cache les données de connexion a la BDD, mes médias interne et ma clef de sécurite.

+1 -0

Je ne sais pas comment fonctionne ZdS, mais pour mes projets perso, il y a

1
SECRET_KEY = "minimal"

Dans le settings.py sur le dépôt, parce que django refuse de démarrer sans une SECRET_KEY. Puis je fait un

1
2
3
4
try:
    from .local_settings import *
except ImportError:
    pass

À la fin du settings.py pour écraser cette valeur.

Et dans local_settings.py, il y a en gros les même choses que toi, plus de la configuration locale (logs, medias, …)

+2 -0

J'aime ton idée de l'import, cela facilite grandement la complexité de la mise en prod. C'est vrai que je suis parti sur un script tout de suite sans trop me poser de question.

En tout cas merci de ta réponse, on va voir si quelqu'un a une autre réponse.

De mon côté je suis pas arrivé a voir a quoi sert concrètement cette clef secrète.

+0 -0

La clé disponible dans le fichier settings.py du dépôt de ZdS est bien sûr une fausse clé, pas celle utilisée en production … enfin, je l'espère ! Toutes les données secrètes sont dans un fichier settings_prod.py importé quand il existe (voir ici).

Si l'on en croit la documentation de Django, c'est "la clé de la sécurisation des données signées". Je ne sais pas ce qu'ils entendent par là. Peut-être est-elle utilisée pour saler les mots de passe ?

+0 -0

L’import d’un autre fichier qui écrase les anciennes valeurs est un bonne idée, une autre bonne idée donné dans le livre Two Scoops of Django et que j’aime bien est d’utiliser un fihier config.json pas versionnalisé et d’utiliser une fonction d’import :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from django.core.exceptions import ImproperlyConfigured

config_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.json')

with open(config_file) as f:
    config = json.loads(f.read())

def get_param(setting, config=config, default=None):
    """Get the secret variable or return explicit exception."""
    try:
        return config[setting]
    except KeyError:
        if default:
            return default
        error_msg = "Set the {0} config variable".format(setting)
        raise ImproperlyConfigured(error_msg)

SECRET_KEY = get_param('secret_key')

L’avantage est qu’on garde le settings.py sur le VCS et que le code lève une exception si il manque une clé dans le config.json

+0 -0

Intéressant comme pratique. Pour le moment je me suis contenter d'un script bash bien propre, mais a refaire c'est vrai que ta technique peu largement simplifier la maintenance en cas de changement.

Bon après mon settings je le change pas tout les jours non plus (du moins pas les parties devant être caché).

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte