W poprzednim pytaniu dowiedziałem się, że powinienem ustawić zakończenie nginx ssl i nie zezwalać Railsom na przetwarzanie zaszyfrowanych danych.
Więc dlaczego istnieje następujące?
config.force_ssl = true
Widzę to zakomentowane w pliku konfiguracyjnym produkcji. Ale jeśli oczekuje się, że nginx obsłuży wszystkie rzeczy związane z SSL, aby moja aplikacja rails nie obsługiwała zaszyfrowanych danych, to co config.force_ssl = true
zrobi?
Czy powinienem zostawić to zakomentowane w produkcji, jeśli wiem, że zawsze będę używać nginx?
źródło
force_ssl
właściwość dla każdego kontrolera .force_ssl
Zmienna config, który instalujeRack::SSL
oprogramowanie warstwy pośredniej, która ma umożliwić TGV domyślnie .config.force_ssl = true
powinno być domyślne, dlaczego zespół railsowy skomentował to jako domyślne?Ustawienie
config.force_ssl
obejmujeActionDispatch::SSL
. DokumentyActionDispatch::SSL
opisują funkcjonalność w następujący sposób (podkreślenia dodane dla przejrzystości):DOCS
To oprogramowanie pośredniczące jest dodawane do stosu, gdy
config.force_ssl = true
opcje ustawione w programie są przekazywane i przekazywaneconfig.ssl_options
. Wykonuje trzy zadania, aby wymusić bezpieczne żądania HTTP:Przekierowanie TLS: na stałe przekierowuje żądania http: // do https: // z tym samym hostem URL, ścieżką itp. Domyślnie włączone. Ustaw
config.ssl_options
modyfikację docelowego adresu URL (np.redirect: { host: "secure.widgets.com", port: 8080 }
) Lubredirect: false
wyłącz tę funkcję.Bezpieczne pliki cookie: ustawia
secure
flagę plików cookie, aby poinformować przeglądarki, że nie mogą być wysyłane wraz z żądaniami http: //. Domyślnie włączone. Ustaw zaconfig.ssl_options
pomocą,secure_cookies: false
aby wyłączyć tę funkcję.HTTP Strict Transport Security (HSTS): nakazuje przeglądarce zapamiętać tę witrynę jako tylko TLS i automatycznie przekierowywać żądania inne niż TLS . Domyślnie włączone. Skonfiguruj za
config.ssl_options
pomocą,hsts: false
aby wyłączyć. Ustaw zaconfig.ssl_options
pomocą,hsts: { … }
aby skonfigurować HSTS:expires
: Jak długo (w sekundach) te ustawienia będą obowiązywać. Domyślnie180.days
(zalecane). Minimalne wymagane do zakwalifikowania się do listy wstępnego ładowania przeglądarki to18.weeks
.subdomains
: Ustaw, abytrue
poinformować przeglądarkę o zastosowaniu tych ustawień do wszystkich subdomen. Chroni to pliki cookie przed przechwyceniem przez wrażliwą witrynę w subdomenie. Domyślnietrue
.preload
: Reklamuj, że ta witryna może być uwzględniona na wstępnie załadowanych listach HSTS przeglądarek. HSTS chroni Twoją witrynę podczas każdej wizyty z wyjątkiem pierwszej wizyty, ponieważ nie widziała jeszcze Twojego nagłówka HSTS. Aby wypełnić tę lukę, dostawcy przeglądarek dołączają gotową listę witryn obsługujących HSTS. Przejdź do https://hstspreload.appspot.com, aby przesłać swoją witrynę do uwzględnienia. Aby wyłączyć HSTS, pominięcie nagłówka nie wystarczy. Przeglądarki będą pamiętać oryginalną dyrektywę HSTS do czasu jej wygaśnięcia. Zamiast tego użyj nagłówka, aby powiedzieć przeglądarkom, aby natychmiast wygaśnie HSTS. Ustawieniehsts: false
to skrót dohsts: { expires: 0 }
.Żądania można zrezygnować z przekierowania za pomocą
exclude
:config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
źródło
exclude
” - Ostrzeżenie: ta funkcja została dodana dopiero niedawno w Rails 5, więc nie będzie działać dla tych z nas, którzy korzystają z Rails 4.2 lubexclude
opcje globalne były dostępne na długo przed Railsami 5, więc ma nieco inną składnię:config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/healthcheck/') } }
- serverfault.com/a/517401To ustawienie wymusza HTTPS, przekierowując żądania HTTP do ich odpowiedników HTTPS. Tak więc odwiedzający przeglądarkę
http://domain.com/path
zostanie przekierowany dohttps://domain.com/path
.Pozostawienie ustawienia w komentarzu pozwoliłoby na użycie obu protokołów.
Nadal musisz skonfigurować swój serwer WWW do obsługi żądań HTTPS.
źródło
redirect 301 https:...
), czy WSZYSTKO nie będzie przechodzić przez https, więcconfig.force_ssl = true
tak naprawdę nic nie robi (ponieważ nic nigdy nie będzie http)? Czy jest tu głębszy powód bezpieczeństwa?config.force_ssl
włączone, na wypadek gdyby ktoś usuwał przekierowanie z konfiguracji serwera WWW.config.force_ssl
iadd_header Strict-Transport-Security max-age=...;
spowoduje 2Strict-Transport-Security
nagłówkiWymusza szyfrowanie całej komunikacji z serwerem i używanie SSL, czyli przez HTTPS.
Po dołączeniu go do kontrolera będzie on akceptował tylko żądania HTTPS.
Przydatne linki:
źródło