Стандартная практика для секретного ключа .wsgi для фляжных приложений в репозиториях github [duplicate]

user3188324 спросил: 13 июня 2018 в 12:06 в: github

У этого вопроса уже есть ответ:

  • Where should I place the secret key in Flask? 1 ответ

Я создав флеш-веб-приложение и хотел бы поместить его в репозиторий github.

Я заметил, что в файле .wsgi

#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/hashchain/")from hashchain import app as application
application.secret_key = 'super secret key'

Имеется приложение. secret_key для шифрования ...

Я предполагаю, что стандартный способ размещения флеш-веб-приложения на github будет включать клонирование всей папки приложения флэков в полном объеме, но НЕ .wsgi-файл?

Таким образом, участники могут свободно запускать флягу в режиме отладки на своем собственном локальном хосте, чтобы развивать ее дальше, и если они действительно хотят, можно развернуть ее на свой собственный сервер (но придется писать свой собственный .wsgi-файл и конфигурацию для сервера в их контроле).

Правильно ли это думать об этом? Я предполагаю, что если я положу файл .wsgi на github, это будет праздничный праздник для хакеров?

  • Я также предполагаю, что если я предположительно это сделал? Мне нужно было бы изменить секретный ключ после удаления его в репозитории github, потому что люди могли просто посмотреть историю фиксации, чтобы увидеть его!

2 ответа

Grey Li ответил: 14 июня 2018 в 05:41

Общий способ сделать это читается из переменной окружения:

import osapplication.secret_key = os.getenv('SECRET_KEY', 'for dev') 

Обратите внимание, что оно также устанавливает значение по умолчанию для разработки.

Вы можете установить enviroment variable SECRET_KEY вручную:

$ export SECRET_KEY=you_key_here  # use $ set ... in Windows

Или вы можете сохранить его в файле .env в корне проекта:

SECRET_KEY=you_key_here

Добавьте его в .gitignore:

.env

Затем вы можете использовать python-dotenv или что-то похожее на импорт переменной:

# pip install python-dotenv
import os
from dotenv import load_dotenvload_dotenv()application.secret_key = os.getenv('SECRET_KEY', 'for dev') 
VonC ответил: 14 июня 2018 в 05:50
Мне нравится подход с переменной окружения лучше, чем мой подход к чтению файлов. +1
Grey Li ответил: 14 июня 2018 в 05:53
Спасибо, вы можете прочитать "Конфигурация приложений Twelve-Factor App #" для получения дополнительной информации.
VonC ответил: 14 июня 2018 в 05:54
Я знаю :) Это то, на что он напомнил. И почему я поддержал свой ответ над моим.
VonC ответил: 13 июня 2018 в 02:53

Как отмечалось, секретная или любая другая конфиденциальная информация никогда не должна была быть частью репозитория Git.

Чтобы проиллюстрировать это, см. ubuntudesign/git-mirror-service, простой сервер WSGI для создания зеркала удаленного репозитория git на другом удаленном компьютере. Он включает в себя шаг:

Необязательный секрет

По умолчанию сервер не защищен - любой, кто может получить к нему доступ, может используйте его для зеркалирования в хранилищах, к которым сервер имеет доступ.

Чтобы предотвратить это, вы можете добавить секрет:

echo "79a36d50-09be-4bf4-b339-cf005241e475" > .secret

Как только этот файл будет установлен, служба будет разрешать запросы только в том случае, если этот секрет предоставлен.

Примечание. Для того, чтобы это была эффективная мера безопасности, сервер должен быть доступен только через HTTPS.

Файл игнорируется в .gitignore.
И wsgi.py читает его, если присутствует:

secret_filename = os.path.join(script_dir, ".secret")
if os.path.isfile(secret_filename):
    with open(secret_filename) as secret_file:
        real_secret = secret_file.read().strip()

Дополнительное видео по вопросу: Стандартная практика для секретного ключа .wsgi для фляжных приложений в репозиториях github [duplicate]

Deploy to GitHub and Heroku

This Is How to Deploy A Website to A Server

Using GitHub With Django and PythonAnywhere