背景
我正在使用 Django(通过模板语言传递数据)编写一个简单的博客应用程序。博客所有者将可以访问管理员页面,并更新数据库。现在我明白,在生产环境中,我必须隐藏安全密钥并关闭调试。
问题
我想知道,将代码推送到 Github 是否会危及应用程序的安全性?
settings.py
文件中。由于你正在使用Django,Python自带一个名为python-decouple
的软件包,它可以帮助你将秘密文件保留在.env文件中。pip install python-decouple现在,让我们考虑你有以下的
settings.py
文件:import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!'
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'HELLO_DJANGO',
'USER': 'U_HELLO',
'PASSWORD': 'hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf',
'HOST': '127.0.0.1',
'PORT': '',
}
}
因此,您需要在django项目的根目录中创建一个.env文件,如下所示:
SECRET_KEY=3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!
DEBUG=True
DB_NAME=HELLO_DJANGO
DB_USER=U_HELLO
DB_PASSWORD=hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf
DB_HOST=127.0.0.1
如果您想将项目上传到Github,请确保在.gitignore文件中包含.env文件。 现在是最后一步:
import os
from decouple import config
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', cast=bool)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': config('DB_NAME'),
'USER': config('DB_USER'),
'PASSWORD': config('DB_PASSWORD'),
'HOST': config('DB_HOST'),
'PORT': '',
}
}
default_settings.py
class Config():
DEBUG = False
TESTING = False
[...]
class ProductionConfig(Config):
[...]
class DevelopmentConfig(Config):
SECRET_KEY = 'dummy_key'
DEBUG = True
[...]
class TestingConfig(Config):
SECRET_KEY = 'dummy_key'
TESTING = True
[...]
application.wsgi
#!/usr/bin/env python3
"""Sample wsgi file
Customize path to virtual environment and you're done
"""
import os
import sys
import runpy
# Working with Virtual Environment
# see http://flask.pocoo.org/docs/0.10/deploying/mod_wsgi/
# and also https://gist.github.com/LeZuse/4032238
# and https://dev59.com/YHRC5IYBdhLWcg3wAcbU
runpy.run_path('/path/to/venv/bin/activate_this.py')
# Add application to Python path
# Check before adding so as not to add it multiple times
# when reloading the file:
# https://code.google.com/p/modwsgi/wiki/ReloadingSourceCode
PATH = os.path.dirname(__file__)
if PATH not in sys.path:
sys.path.append(PATH)
# Set environment variable to indicate production mode
os.environ['FLASK_CONFIG'] = 'ProductionConfig'
# Provide path to custom settings file
os.environ['SETTINGS_FILE'] = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
'settings.cfg'
)
[...]
settings.cfg
# Flask secret key
# To generate a secret key:
# ''.join([random.choice(string.printable) for i in range(100)])
SECRET_KEY =
# Other secret keys
[...]
config_class = os.getenv('FLASK_CONFIG')
app.config.from_object(config_class)
app.config.from_envvar('SETTINGS_FILE', silent=True)
使用setuptools
,我可以轻松地在virtualenv
中部署应用程序。创建应用程序的实例只需要以下步骤:
pip install my_app
.wsgi
示例文件settings.cfg
示例文件/etc/apache2/sites-available/my_app.conf
)服务器上的网站目录仅包含特定于此实例的虚拟环境和两个配置文件。
在存储库中存储示例文件(.wsgi
,settings.cfg
,apache .conf
文件等)是可以的,放置在docs/
目录中,并带有参数占位符。
#
、=
可能会导致意外行为。因此最好总是将其用引号括起来,例如:SECRET_KEY="3izb^ryglj(bvrjb2_y1fZvcnbky#358_l6-nn#i8fkug4mmz!"
- Jaladh Singhal