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?
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 inicjalizatorasecret_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.
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,
- jeśli Twoja aplikacja jest wywołana
Hello
i - 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).
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