web-dev-qa-db-ja.com

Flaskが起動するたびに秘密鍵を生成しないのはなぜですか?

セッションを使用する場合、Flaskには秘密鍵が必要です。私が見たすべての例では、秘密鍵は何らかの方法で生成され、ソースコードまたは構成ファイルに保存されています。

それを永久に保存する理由は何ですか?アプリケーションの起動時に単純に生成しないのはなぜですか?

app.secret_key = os.urandom(50)
33

秘密鍵は、セッションCookieの署名に使用されます。アプリケーションを再起動してキーを再生成する必要がある場合、既存のセッションはすべて無効になります。それはおそらくあなたが望むものではありません(または少なくとも、セッションを無効にするための正しい方法ではありません)。同様のケースは、(たとえば)リセットされたパスワードのURLを提供するために危険で生成されたトークンなど、秘密鍵に依存する他のすべての場合にも行われます。

クラッシュ、サーバーの再起動、バグ修正や新機能のプッシュ、または使用しているサーバーが新しいプロセスを生成するなどの理由で、アプリケーションの再起動が必要になる場合があります。したがって、信頼できません。サーバー上で永遠に稼働しています。

標準的な方法は、使い捨てのキーをリポジトリにコミットして(開発マシンにはsomethingがあるようにする)、デプロイ時にローカル構成でキーを設定することです。これにより、キーが漏洩することはなく、再生成する必要もありません。

また、バックグラウンドタスクを実行するためのCeleryや、アプリケーションの複数の負荷分散インスタンスなど、アプリのコンテキストに依存するセカンダリシステムを実行する場合もあります。アプリケーションの実行中の各インスタンスの設定が異なる場合、場合によっては正しく動作しないことがあります。

37
davidism