Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将我的代码发布到github会影响我的应用程序的安全性吗?_Django_Security_Github - Fatal编程技术网

Django 将我的代码发布到github会影响我的应用程序的安全性吗?

Django 将我的代码发布到github会影响我的应用程序的安全性吗?,django,security,github,Django,Security,Github,背景 我正在用Django(通过模板语言传递的数据)编写一个简单的博客应用程序。博客的所有者将有权访问管理页面,在那里他们将更新数据库。现在我明白了,在生产中,我必须隐藏安全密钥并关闭调试 问题 我想知道的是,将代码推送到github会危及应用程序的安全吗?避免将代码发布到github不会使网站更安全。我想说的恰恰相反。为什么?因为如果一个好的黑客真的想找到漏洞,他会的。但是,如果您将代码发布到github,您很可能会遇到白帽,他们会告诉您是否发现了安全问题(但是,您不应该让明显的安全问题发生)

背景

我正在用Django(通过模板语言传递的数据)编写一个简单的博客应用程序。博客的所有者将有权访问管理页面,在那里他们将更新数据库。现在我明白了,在生产中,我必须隐藏安全密钥并关闭调试

问题


我想知道的是,将代码推送到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': '',
    }
}