Django 将我的代码发布到github会影响我的应用程序的安全性吗?
背景 我正在用Django(通过模板语言传递的数据)编写一个简单的博客应用程序。博客的所有者将有权访问管理页面,在那里他们将更新数据库。现在我明白了,在生产中,我必须隐藏安全密钥并关闭调试 问题Django 将我的代码发布到github会影响我的应用程序的安全性吗?,django,security,github,Django,Security,Github,背景 我正在用Django(通过模板语言传递的数据)编写一个简单的博客应用程序。博客的所有者将有权访问管理页面,在那里他们将更新数据库。现在我明白了,在生产中,我必须隐藏安全密钥并关闭调试 问题 我想知道的是,将代码推送到github会危及应用程序的安全吗?避免将代码发布到github不会使网站更安全。我想说的恰恰相反。为什么?因为如果一个好的黑客真的想找到漏洞,他会的。但是,如果您将代码发布到github,您很可能会遇到白帽,他们会告诉您是否发现了安全问题(但是,您不应该让明显的安全问题发生)
我想知道的是,将代码推送到github会危及应用程序的安全吗?避免将代码发布到github不会使网站更安全。我想说的恰恰相反。为什么?因为如果一个好的黑客真的想找到漏洞,他会的。但是,如果您将代码发布到github,您很可能会遇到白帽,他们会告诉您是否发现了安全问题(但是,您不应该让明显的安全问题发生) 在我看来,不向github发布代码几乎可以保证您的代码不会被窃取。但是,如果你有正确的许可证,我想你可以起诉偷走你代码的人 PS:我还不是最有经验的开发人员,所以你也许应该考虑其他的意见
编辑:给你一些阅读如果我不想让任何人看到我的代码,也不想让我想访问的任何人看到我的代码,我会将我的回购协议保密。名义上的费用是值得的,至少对我来说是这样
但总的来说,我的项目源代码是开放的,正如Alex所说,这是一个从其他人那里获取信息的好机会。这个问题有两个方面。密码和密钥是两个不同的问题 发布代码是否会影响应用程序的安全性? 虽然公开发布代码可能会引起读者的注意,他们可能会指出安全问题,但它也会将这些问题暴露给潜在的恶意个人。隐藏代码并不会使它更安全,但至少安全问题不会那么明显。问题的这一部分已经辩论过,可以被视为基于意见或重复 在另一个答案中查看或链接到 如何在不公开敏感信息的情况下发布代码? 不要在代码中放入机密内容(密码、密钥等)。这些应该位于存储库中不存在的配置文件中。即使存储库是私有的,把它们放在这里也有点脏 将代码视为一个应用程序。使用您的代码的网站是此应用程序的一个实例,具有特定设置。您可以有多个网站使用不同的设置共享相同的代码(顺便说一句,这使得维护更容易) 烧瓶配置模式示例 这是我用烧瓶做的。我认为Django也可以使用类似的模式,尽管它可以提供帮助来以不同的方式进行操作(比如
Django decouple
in)
在存储库中放置一个default\u settings.py
文件,并在实例化应用程序时覆盖一些重要设置。这是此处描述的模式:
默认_settings.py
请注意,我没有在生产模式下设置默认密钥,因此如果我忘记在应用程序配置文件中覆盖它,应用程序将不会使用伪密钥运行
application.wsgi
settings.cfg
然后在应用程序中
config_class = os.getenv('FLASK_CONFIG')
app.config.from_object(config_class)
app.config.from_envvar('SETTINGS_FILE', silent=True)
(多)实例化简化
使用setuptools
,我可以在virtualenv
中轻松部署应用程序。创建应用程序实例只需执行以下步骤:
- 创建虚拟环境
pip安装我的应用程序
- 复制并改编
示例文件.wsgi
- 复制并调整本地
示例文件设置.cfg
- 在web服务器中配置并激活网站(
)/etc/apache2/sites available/my_app.conf
将示例文件存储在repo中的
docs/
目录(.wsgi
,settings.cfg
,apache.conf
文件,…),使用占位符作为参数。是的,您可以,但请确保您的密钥和密码不保存在主设置.py
文件中。由于您使用的是django,python附带了一个名为的包,它可以帮助您将机密文件保存在.env文件中
您可以在django项目中使用以下命令进行安装:
pip install python-decouple
因此,您需要做的是在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上,技术漏洞都是相同的(前提是您不共享机密,但请注意机密应仅为加密的,诸如算法或某事物的工作方式或集成方式等不应为机密,请参阅)
但是,在GitHub上共享代码确实会影响您的风险,而且很难说总体上是哪种方式,它会变得相当固执己见。您肯定会有不同的风险状况。使用开放源代码(而不是封闭源代码)会修改威胁模型中某些事情的可能性(有些可能性越来越小,但有些可能性越来越大),这是你应该承认和管理的。如果你与少于5人的团队合作,bitbucket上有无限的免费私人回购。@AlexvanVliet我不知道。谢谢你提供的信息。
config_class = os.getenv('FLASK_CONFIG')
app.config.from_object(config_class)
app.config.from_envvar('SETTINGS_FILE', silent=True)
pip install python-decouple
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': '',
}
}
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
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': '',
}
}