Na czym polega wykorzystanie tajnej bazy kluczy w rails 4

Jestem nowy w Rails 4 i nie rozumiem użycia secret_key_base Pod config/secrets.yml w Rails 4. Czy możesz wyjaśnić tę koncepcję?

Również, gdy pracuję w środowisku produkcyjnym, jestem poproszony o ustawienie secret_key z devise.rb, config.secret_key, i secret_key_base. Jednakże mogę wygenerować nowy sekret używając komendy rake secret.

Jaka jest różnica między środowiskiem programistycznym a produkcyjnym?

Jak to pasuje do nowo wygenerowanego {[2] } Kiedy dodaję go z secret_key_base za każdym razem Ja generuję?

Jak zabezpieczyć aplikację z innymi serwerami?

Author: Andrey Deineko, 2014-08-21

2 answers

Zawartość pliku secret_token.rb zawiera długi losowy ciąg znaków który służy do weryfikacji integralności podpisanych plików cookie (takich jak sesje użytkownika, gdy ludzie są zalogowani do Twojej aplikacji internetowej).

Dokumentacja mówi:

Użyj istniejącego secret_key_base z inicjalizatora secret_token.rb aby ustawić zmienną środowiskową SECRET_KEY_BASE dla każdego użytkownika uruchom aplikację Rails w trybie produkcyjnym. Alternatywnie, można po prostu skopiować istniejące secret_key_base z inicjalizatora secret_token.rb do secrets.yml w sekcji produkcja, zastępując <%= ENV["SECRET_KEY_BASE"] %>.

Ponieważ jest to ważny plik i nie można go umieścić .w tym celu należy użyć zmiennej env do przechowywania wartości secret_key_base:

Utwórz plik .env lub .powenv i zapisz go jako:

export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"

A następnie w 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

Ten artykuł jest (trochę stary i) długi, ale naprawdę pełen przydatnych informacji na temat temat.


Aktualizacja 04.05.15

Począwszy od Rails 4.2 nie ma już secret_token.rb pliku. Zgodnie z nową konwencją istnieje plik config/secrets.yml mający na celu przechowywanie tajemnic aplikacji.

Przeczytaj Jak uaktualnić istniejącą aplikację do wersji 4.2.x według innowacji.


Technicznie cel {[12] } ma być tajnym wejściem dla metody key_generator aplikacji (Sprawdź Rails.application.key_generator).

Aplikacji key_generator, a więc secret_key_base, są używane przez w Rails są trzy podstawowe funkcje:]}

  • Wyprowadzanie kluczy dla zaszyfrowanych plików cookie, które są dostępne za pośrednictwem cookies.encrypted.
  • wyprowadzenie klucza dla plików cookie podpisanych HMAC, które są dostępne za pośrednictwem cookies.signed.
  • Wyprowadzanie kluczy dla wszystkich nazwa aplikacji message_verifier przypadki.
Zobacz więcej na temat każdego z trzech w artykuł autorstwa @michaeljcoyne.
 50
Author: Andrey Deineko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-23 11:31:51

Secret_key_base służy do szyfrowania i podpisywania sesji

W celu bezpiecznego wysyłania sesji tam iz powrotem w plikach cookie


In Rails 4,

  1. jeśli Twoja aplikacja jest wywołana Hello i
  2. ustawiasz session['a'] = 'b',

Twoje ciasteczko będzie wyglądało mniej więcej tak:

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

Co tłumaczy się na:

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

Pliki cookie są ustawiane przez serwer i przechowywane po stronie klienta, a przeglądarka ponownie wysyła ustawione pliki cookie na serwer za każdym razem, gdy o to poprosimy stronę.

Aby zapobiec złym ludziom od zrozumienia a=b ciąg, jest zaszyfrowany .
Aby zapobiec manipulowaniu Plikami cookie przez złych ludzi, używany jest podpis cyfrowy .

W obu przypadkach używana jest wartość secret_key_base (do szyfrowania/odszyfrowywania a = b i walidacji podpisu cyfrowego).

 22
Author: lakesare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-02 12:30:38