github 存储库上 Flask 应用程序的 .wsgi 密钥的标准实践
Standard practice for .wsgi secret key for flask applications on github repositories
我正在构建一个 Flask Web 应用程序,并希望将其放在 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'
有一个application.secret_key用于加密...
我猜测将 Flask Web 应用程序放在 github 上的标准方法包括克隆整个 Flask 应用程序文件夹而不是 .wsgi 文件?
这样,贡献者可以在自己的本地主机上以调试模式自由 运行 flask 以进一步开发它,如果他们真的想要可以将它部署到他们自己的服务器(但必须编写自己的 .wsgi他们控制的服务器的文件和配置)。
这是正确的思考方式吗?我猜想如果我将 .wsgi 文件放在 github 上,它会成为黑客的开放季节吗?
- 我也在猜测,如果我假设已经这样做了?在 github 存储库中删除密钥后,我需要更改密钥,因为人们只需查看提交历史就可以看到它!
如评论所述,秘密或任何其他敏感信息永远不应成为 Git 存储库的一部分。
为了说明这一点,请参阅 ubuntudesign/git-mirror-service
,一个简单的 WSGI 服务器,用于在另一个远程上创建远程 git 存储库的镜像。
它确实包括以下步骤:
Optional secret
By default the server is unsecured - anyone who can access it can use it to mirror to repositories that the server has access to.
To prevent this, you can add a secret:
echo "79a36d50-09be-4bf4-b339-cf005241e475" > .secret
Once this file is in place, the service will only allow requests if the secret is provided.
NB: For this to be an effective security measure, the server should be only accessible over HTTPS.
文件是ignored in .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()
执行此操作的一般方法是从环境变量中读取:
import os
application.secret_key = os.getenv('SECRET_KEY', 'for dev')
请注意,它还为开发设置了默认值。
您可以手动设置环境变量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_dotenv
load_dotenv()
application.secret_key = os.getenv('SECRET_KEY', 'for dev')
我正在构建一个 Flask Web 应用程序,并希望将其放在 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'
有一个application.secret_key用于加密...
我猜测将 Flask Web 应用程序放在 github 上的标准方法包括克隆整个 Flask 应用程序文件夹而不是 .wsgi 文件?
这样,贡献者可以在自己的本地主机上以调试模式自由 运行 flask 以进一步开发它,如果他们真的想要可以将它部署到他们自己的服务器(但必须编写自己的 .wsgi他们控制的服务器的文件和配置)。
这是正确的思考方式吗?我猜想如果我将 .wsgi 文件放在 github 上,它会成为黑客的开放季节吗?
- 我也在猜测,如果我假设已经这样做了?在 github 存储库中删除密钥后,我需要更改密钥,因为人们只需查看提交历史就可以看到它!
如评论所述,秘密或任何其他敏感信息永远不应成为 Git 存储库的一部分。
为了说明这一点,请参阅 ubuntudesign/git-mirror-service
,一个简单的 WSGI 服务器,用于在另一个远程上创建远程 git 存储库的镜像。
它确实包括以下步骤:
Optional secret
By default the server is unsecured - anyone who can access it can use it to mirror to repositories that the server has access to.
To prevent this, you can add a secret:
echo "79a36d50-09be-4bf4-b339-cf005241e475" > .secret
Once this file is in place, the service will only allow requests if the secret is provided.
NB: For this to be an effective security measure, the server should be only accessible over HTTPS.
文件是ignored in .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()
执行此操作的一般方法是从环境变量中读取:
import os
application.secret_key = os.getenv('SECRET_KEY', 'for dev')
请注意,它还为开发设置了默认值。
您可以手动设置环境变量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_dotenv
load_dotenv()
application.secret_key = os.getenv('SECRET_KEY', 'for dev')