Meine Webanwendung wird auf einer anderen Anzahl von Hosts ausgeführt, die ich steuere. Um zu verhindern, dass die Apache-Konfiguration jedes vhost geändert werden muss, füge ich den größten Teil der Konfiguration mithilfe von .htaccess-Dateien in meinem Repo hinzu, sodass die Grundeinstellung jedes Hosts nur aus wenigen Zeilen besteht. Dies ermöglicht auch das Ändern der Konfiguration beim Bereitstellen einer neuen Version. Derzeit setzt .htaccess (un) Header, schreibt etwas um und steuert das Caching der UA.
Ich möchte HSTS in der Anwendung mit .htaccess aktivieren. Das Setzen des Headers ist einfach:
Header always set Strict-Transport-Security "max-age=31536000"
In der Spezifikation heißt es jedoch eindeutig: "Ein HSTS-Host darf das STS-Headerfeld NICHT in HTTP-Antworten enthalten, die über einen nicht sicheren Transport übermittelt werden." Daher möchte ich den Header nicht senden, wenn er über HTTP-Verbindungen gesendet wird. Siehe http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14 .
Ich habe versucht, den Header mithilfe von Umgebungsvariablen festzulegen, bin aber dort hängen geblieben. Wer weiß, wie das geht?
quelle
Antworten:
Anscheinend ist eine HTTPS-Umgebungsvariable verfügbar, die einfach verwendet werden kann. Für Menschen mit der gleichen Frage:
quelle
.htaccess
Datei."expr=%{HTTPS} == 'on'"
funktionierte jedoch. Die ganze Linie ist dannHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" "expr=%{HTTPS} == 'on'"
. Vielleicht liegt es amalways
Schlüsselwort?HTTPS
env-Variable in der Bedingungenv=HTTPS
von der Server- Variable unterscheidet, die wir normalerweise unter mod_rewrite-Bedingungen (und Apache-Ausdruck) als sehen%{HTTPS}
. Da dies eine env- Variable ist, hängt sie von der Umgebung ab, d. H. Serverkonfiguration Manchmal wird es nie eingestellt. Manchmal wird ihm der gleiche Wert wie derHTTPS
Server var zugewiesen (daher wird er immer entweder auf "off" oder "on" gesetzt - und die Bedingungenv=HTTPS
ist immer wahr!env=HTTPS
Testet einfach, ob der env var gesetzt ist, nicht, dass er "on" ist. .) Die Verwendung eines Apache-Ausdrucks, wie von @ AdrianFöder vorgeschlagen, wird für Apache 2.4+Um auf der Antwort von nielsr aufzubauen, habe ich im .htaccess Folgendes verwendet, um die Empfehlungen für die sichere Bereitstellung unter https://hstspreload.org zu erfüllen, mit denen die Domain im Chrome-Browser fest codiert wird. Beachten Sie, dass dies HSTS in Ihren Subdomains erzwingt und dass die Aufnahme in die Preload-Liste nicht einfach rückgängig gemacht werden kann, also rtfm.
quelle
Sie können dies verwenden und in Ihre htaccess-Datei einfügen, um https://hstspreload.org zu erfüllen . Fügen Sie dies in Ihre .htaccess-Datei ein.
Zunächst wird eine Umleitung für Nicht-https zu https durchgeführt. und leiten Sie nicht www https zu www https mit HSTS-Header um.
( http://example.com -> https://example.com -> https://www.example.com - mit HSTS-Header)
Getestet und eingehalten https://hstspreload.org
quelle
Für
httpd.conf
(wenn Sie Zugriff haben, um dies zu bearbeiten) können Sie verwendenHINWEIS: Sie müssen es nur auf dem HTTPS-vhost festlegen und dürfen nicht auf http vhost sein.
Wann sollte ich und sollte ich keine .htaccess-Dateien verwenden?
quelle
Eine weitere Alternative besteht darin, den Header immer festzulegen und für Nicht-SSL-Verbindungen bedingt zu entfernen:
Dies hat den Vorteil, dass die
Header
Direktive sowohl mit derenv
Bedingung als auch mit demearly
Flag verwendet werden kann. Mit einer einzigenHeader
Richtlinie,env
undearly
nicht zusammen verwendet werden können, sind sie sich gegenseitig ausschließen (siehe offizielle Dokumentation: https://httpd.apache.org/docs/current/mod/mod_headers.html#header ).quelle