40

PythonとDjangoを使用してWebアプリケーションを作成し、ソース管理に保存します。Djangoの通常の設定方法では、パスワードはsettings.pyファイル内のプレーンテキストです。

パスワードをプレーンテキストで保存すると、特にこれがオープンソースプロジェクトであり、ソースコードがバージョン管理されているため(Githubのgitを介して、全世界が見ることができるため)、多くのセキュリティ問題が発生します。

問題は、Django/Python開発環境でsettings.pyファイルを安全に作成するためのベストプラクティスは何でしょうか。

4

4 に答える 4

48

stackoverflowでPython固有のものを見つけることはできませんでしたが、役立つWebサイトを見つけ、そのソリューションを他のコミュニティと共有したいと思いました。

解決策:環境変数。

注:環境変数はLinux / Unix / OS XとWindowsの両方の世界で類似していますが、このコードをWindowsマシンでテストしたことはありません。動作するかどうか教えてください。

bash / shシェルで、次のように入力します。

export MYAPP_DB_USER='myapp'
export MYAPP_DB_PASSWORD='testing123'

そして、Djangosettings.pyファイルで:

DATABASE_USER = os.environ.get("MYAPP_DB_USER", '')
DATABASE_PASSWORD = os.environ.get("MYAPP_DB_PASSWORD", '')

この場合、環境変数が存在していなければ、ユーザー名とパスワードはデフォルトで空の文字列になります。

于 2013-03-10T21:20:55.767 に答える
3

環境変数は多くの構成に便利ですが、パスワードを環境変数に入れることは安全ではありません 。代わりに、通常のバージョン管理外の構成ファイルを使用する場合、いくつかのさまざまな短所があります。

  • 環境変数が誤ってリークする可能性があります (プレーンテキストを介して送信される可能性があるデバッグ チャネルを通じて、エンド ユーザー、または ~/.*sh_history などのファイル システム内の予期しない場所に送信される可能性があります)。

  • 構成ファイルが誤ってバージョン管理に追加され、デプロイ権限のないユーザーがアクセスできるリポジトリに配置される可能性があります。

より多くの議論については、環境変数はあなたの秘密にとって有害で​​あると考えられているブログ記事を読んでください: 環境はプロセス全体からアクセス可能であり、子 (およびおそらくサードパーティ) プロセスに継承されます。機密として。

Python の最も単純な構成ファイル形式は、単なるPython モジュールです

于 2016-12-08T15:27:51.533 に答える
0

これは古い質問であり、尋ねた人はこれに対処する方法を見つけたと確信していますが、ここでの回答は私が探していた解決策ではなかったので、私はこれを自分で調べて考えました.同じ質問をしている可能性のある他の人のためにしました。

私がしたことは、getpass() を使用して、起動時に実行するときに設定ファイルにパスワードを要求させることでした。

from getpass import getpass

#[...]

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #or whatever DB you use
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': getpass(),
        'HOST': '',
        'PORT': '',
    }
}
于 2020-01-07T17:31:30.587 に答える