1. ホーム
  2. ruby-on-rails

railsのsecret_key_baseの使用方法について 4

2023-07-17 18:23:47

質問

Rails 4の初心者なのですが、Rails 4で使用されている secret_key_base の下に config/secrets.yml の下にあります。この概念について説明していただけますか?

また、本番環境で作業しているときに、プロンプトが表示され、その中に secret_keydevise.rb , config.secret_key そして secret_key_base . しかし、新しい秘密は rake secret コマンドを使用して新しい秘密を生成することができます。

開発環境と本番環境の違いは何ですか?

新しく生成された secret_key で追加したとき secret_key_base で追加した場合、どうなるのでしょうか?

他のサーバとのアプリケーションの安全性はどうなっているのでしょうか?

どのように解決するのですか?

この secret_token.rb ファイルのコンテンツには、長いランダムな文字列 これは署名されたクッキーの完全性を検証するために使用されます。 (例えば、人々がウェブアプリにサインインしたときのユーザーセッションなど)。

ドキュメンテーション は言う。

にある既存の secret_key_base を使用します。 secret_token.rb イニシャライザー で設定したSECRET_KEY_BASE環境変数を、Railsアプリを本番モードで実行するすべてのユーザに対して設定します。 を設定します。別の方法として、既存のsecret_key_baseを単に secret_token.rb イニシャライザーにある既存のsecrets.ymlをproductionセクションにコピーし、代わりに <%= ENV["SECRET_KEY_BASE"] %> .

重要なファイルであり、.gitignoreに入れることはできないので、env変数に secret_key_base の値を格納するのが良い方法とされています。

作成 .env または .powenv というファイルにして保存します。

export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"

そして config/initializers/secret_token.rb

YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments
  ('a' * 30) # should be at least 30 chars long
else
  ENV['SECRET_TOKEN']
end

この記事 は(少し古くて)長いですが、このトピックに関する有用な情報が本当にたくさんあります。


更新 04.05.15

Rails 4.2からは secret_token.rb ファイルはなくなりました。 新しい規約では config/secrets.yml ファイルがあり、アプリケーションの秘密を保存することを目的としています。

読んでみてください をご覧ください。既存のアプリを 4.2.x にアップグレードする方法について、技術革新にしたがって説明します。


技術的には secrect_key_base は、アプリケーションの秘密の入力として key_generator メソッド(チェック Rails.application.key_generator ).

アプリケーションの key_generator であり、したがって secret_key_base は、Railsフレームワーク内の3つのコア機能で使用されています。

  • 暗号化されたクッキーのキーを導き出す。 cookies.encrypted .
  • HMACで署名されたクッキーのキーを導き出す。 でアクセスできます。 cookies.signed .
  • アプリケーションのすべての名前付きキーの導出 アプリケーションの名前付き message_verifier インスタンスになります。

3つのそれぞれについて、詳しくは の記事をご覧ください。 .