Подтвердить что ты не робот

Каково использование secret_key_base в рельсах 4

Я новичок в Rails 4 и не понимаю использование secret_key_base под config/secrets.yml в Rails 4. Не могли бы вы объяснить эту концепцию?

Кроме того, когда я работаю в рабочей среде, мне предлагается установить secret_key с помощью devise.rb, config.secret_key и secret_key_base. Однако я могу генерировать новый секрет, используя команду rake secret.

В чем разница между средами разработки и производства?

Как это соотносится с вновь созданным secret_key, когда я добавляю его с secret_key_base каждый раз, когда я сгенерирую?

Как защитить приложение от других серверов?

4b9b3361

Ответ 1

Содержимое файла secret_token.rb содержит длинную рандомизированную строку , которая используется для проверки целостности подписанных файлов cookie (например, сеансов пользователя, когда люди подписываются в вашем веб-приложении).

Документация говорит:

Используйте существующую secret_key_base из инициализатора secret_token.rbдля установки переменной среды SECRET_KEY_BASE для каждого пользователя запустите приложение Rails в режиме производства. В качестве альтернативы вы можете просто скопировать существующую secret_key_base из инициализатора secret_token.rb в secrets.yml в разделе "Производство", заменив <%= 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 в соответствии с нововведениями.

Ответ 2

secret_key_base используется для шифрования и подписи сеанса

, чтобы безопасно отправлять сеанс назад и вперед в файлах cookie


В Rails 4,

  • если ваше приложение называется Hello и
  • вы установили session['a'] = 'b',

ваш файл cookie будет выглядеть примерно так:

_Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689

что означает:

_Hello_session=<encrypted a=b>--<digital signature>

Cookies устанавливаются сервером и поддерживаются на стороне клиента, при этом браузер повторно отправляет файлы cookie на сервер каждый раз, когда мы запрашиваем страницу.

Чтобы не дать злым людям понять строку a=b, она зашифрована.
Чтобы предотвратить злобные люди от подделки печенья, используется цифровая подпись.

В обоих случаях используется значение secret_key_base (для шифрования/дешифрования a = b и для проверки цифровой подписи).