Moja aplikacja internetowa działa na różnej liczbie hostów, które kontroluję. Aby zapobiec konieczności zmiany konfiguracji Apache każdego vhosta, dodaję większość konfiguracji za pomocą plików .htaccess w moim repozytorium, więc podstawowa konfiguracja każdego hosta to tylko kilka wierszy. Umożliwia to również zmianę konfiguracji po wdrożeniu nowej wersji. Obecnie .htaccess (un) ustawia nagłówki, przepisuje magię i kontroluje buforowanie UA.
Chcę włączyć HSTS w aplikacji za pomocą .htaccess. Samo ustawienie nagłówka jest łatwe:
Header always set Strict-Transport-Security "max-age=31536000"
Jednak specyfikacja wyraźnie stwierdza: „Host HSTS NIE MOŻE zawierać pola nagłówka STS w odpowiedziach HTTP przekazywanych za pośrednictwem niezabezpieczonego transportu”. Dlatego nie chcę wysyłać nagłówka podczas wysyłania go przez połączenia HTTP. Zobacz http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14 .
Próbowałem ustawić nagłówek za pomocą zmiennych środowiskowych, ale utknąłem tam. Każdy, kto wie, jak to zrobić?
źródło
Odpowiedzi:
Najwyraźniej dostępna jest zmienna środowiskowa HTTPS, której można łatwo użyć. Dla osób z tym samym pytaniem:
źródło
.htaccess
pliku."expr=%{HTTPS} == 'on'"
zadziałało. A więc cała linia jestHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" "expr=%{HTTPS} == 'on'"
. Może to dlatego, żealways
słowo kluczowe?HTTPS
zmienna env w warunkuenv=HTTPS
różni się od zmiennej serwera , którą często widzimy w warunkach mod_rewrite (i wyrażeniu Apache) jako%{HTTPS}
. Ponieważ jest to zmienna env , zależy od środowiska, tj. konfiguracja serwera. Czasami nigdy nie jest ustawiony. Czasami jest przypisywana ta sama wartość coHTTPS
zmienna serwera (więc zawsze jest ustawiona na „wyłączone” lub „włączone” - a warunekenv=HTTPS
jest zawsze prawdziwy! Poenv=HTTPS
prostu sprawdza, czy zmienna env jest ustawiona, a nie, że jest włączona .) Używanie wyrażenia Apache, jak sugeruje @ AdrianFöder, jest zalecane w Apache 2.4+Opierając się na odpowiedzi nielsr, użyłem następujących elementów w .htaccess, aby spełnić zalecenia dotyczące bezpiecznego wdrażania na https://hstspreload.org, które zakodują domenę na stałe w przeglądarce Chrome. Należy pamiętać, że spowoduje to wymuszenie HSTS we wszystkich subdomenach, a uwzględnienia na liście wstępnego ładowania nie można łatwo cofnąć, więc rtfm.
źródło
Możesz tego użyć i umieścić go w swoim pliku htaccess, aby zachować zgodność z https://hstspreload.org . umieść to w swoim pliku .htaccess.
po pierwsze, przekieruje z połączeń innych niż https do https. i przekierowuj inny niż www https do www https z nagłówkiem HSTS.
( http://example.com -> https://example.com -> https://www.example.com - z nagłówkiem HSTS)
Przetestowane i zgodne z https://hstspreload.org
źródło
Dla
httpd.conf
(jeśli masz dostęp do edytowania tej) można użyćUWAGA: Musisz ustawić go tylko na HTTPS vhost i nie może być na http vhost.
Kiedy powinienem, a kiedy nie używać plików .htaccess?
źródło
Jeszcze inną alternatywą jest zawsze ustawianie nagłówka i warunkowe usuwanie go w przypadku połączeń innych niż SSL:
Ma to tę zaletę, że
Header
dyrektywy można używać zarówno zenv
warunkiem, jak iearly
flagą. Dzięki jednejHeader
dyrektywieenv
iearly
nie można ich używać razem, wykluczają się one wzajemnie (patrz oficjalna dokumentacja: https://httpd.apache.org/docs/current/mod/mod_headers.html#header ).źródło