2014-06-10 6 views
54

Meine Webanwendung wird auf einer anderen Anzahl von Hosts ausgeführt, die ich kontrolliere. Um zu verhindern, dass die Apache-Konfiguration jedes vhost geändert werden muss, füge ich den größten Teil der Konfiguration hinzu, indem ich .htaccess-Dateien in meinem Repo verwende, so dass die Grundkonfiguration jedes Hosts nur aus ein paar Zeilen besteht. Dadurch ist es auch möglich, die Konfiguration bei der Bereitstellung einer neuen Version zu ändern. Momentan setzt der .htaccess (un) Header, schreibt etwas neu und kontrolliert das Caching des UA.So legen Sie HSTS-Header aus .htaccess nur auf HTTPS

Ich möchte HSTS in der Anwendung mit. Htaccess aktivieren. Nur die Header-Einstellung ist einfach:

Header always set Strict-Transport-Security "max-age=31536000" 

Aber die Spezifikation eindeutig fest: „Eine HSTS-Host enthalten darf nicht das STS-Header-Feld in HTTP-Antworten über nicht-sicheren Transport befördert“. Daher möchte ich den Header nicht senden, wenn ich ihn über HTTP-Verbindungen sende. Siehe http://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14.

Ich habe versucht, den Header mit Umgebung Vars, aber ich steckte dort stecken. Wer weiß, wie man das macht?

+0

Stack Overflow ist eine Website für Programmier- und Entwicklungsfragen. Diese Frage scheint off-topic zu sein, weil es nicht um Programmierung oder Entwicklung geht. Siehe [Welche Themen kann ich hier fragen?] (Http://stackoverflow.com/help/on-topic) in der Hilfe. Vielleicht [Super User] (http://superuser.com/) oder [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/) wäre ein besserer Ort, um zu fragen. Siehe auch [Wo veröffentliche ich Fragen zu Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

+3

@jww Die .htaccess-Dateien sind Teil meines Webapp-Repos und werden von Entwicklern gepflegt, um das gewünschte Ergebnis zu erzielen Verhalten der Anwendung (zB Caching, Umschreiben von URLs und Setzen der richtigen Header). Die Frage wird hier fast 20K mal auf SO betrachtet (und [apache], [.htaccess] und [mod-header] Tags sind verfügbar). Also ich denke nicht, dass es hier um ein Thema geht. – nielsr

+1

* "Die .htaccess-Dateien sind Teil meines Webapp-Repos und werden von Entwicklern verwaltet ..." * - Keine der Kriterien für die Aufnahme in Stack Overflow. Ein guter Sniff-Test ist, kannst du deinen Code zeigen? In diesem Fall lautet die Antwort NEIN. Nach der Untersuchung ist es nur eine Apache-Konfigurationsfrage. * "Die Frage wird fast 20K mal angesehen ..." * - Stack Overflow ist eine Müllhalde. Hier wird eine Off-Topic-Frage gestellt und dann von einer Suchmaschine indiziert.Andere Beispiele für das Phänomen sind [Übertragen von Dateien über SSH] (http://stackoverflow.com/q/343711). Entwickler verwenden SSH gelegentlich auch. – jww

Antwort

80

Offenbar gibt es eine HTTPS-Umgebungsvariable, die leicht verwendet werden kann. Für Menschen mit der gleichen Frage:

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS 
+4

ich kann bestätigen das funktioniert – Gaia

+2

In welcher Datei ist diese Einstellung gemacht? –

+7

@ ted.strauss wäre es in '.htaccess' Datei. – zen

10

Um auf nielsr Antwort zu bauen, habe ich die folgende in der .htaccess die sichere Bereitstellung Empfehlungen an https://hstspreload.org gerecht zu werden, die die Domäne in den Chrome-Browser codieren werden. 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.

<IfModule mod_headers.c> 
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS 
</IfModule> 
+3

Es ist ein bisschen sicherer ja - wenn Sie nur beabsichtigen, HTTPS in Ihrer gesamten Domain zu verwenden. Wenn nicht, ist es unglaublich gefährlich - und so ist es unverantwortlich, es ohne Vorwarnung zu empfehlen. Nehmen wir an, Ihr Webserver antwortet mit dieser Kopfzeile auf eine Anfrage in einer Toplevel-Domain (example.com) - dann, wenn Sie Subdomains in eine andere Subdomain einbinden, die von einem anderen Webserver nur über HTTP und nicht https (zB intranet.example.com) bedient wird. , wird nicht funktionieren. Wenn Sie das preload-Tag hinzufügen, können Sie es auch einer Liste mit Vorabversionen zuweisen, die in Webbrowsern fest codiert ist und dann nicht mehr rückgängig gemacht werden kann. –

+1

Fairer Kommentar, Antwort aktualisiert. – LJT

+1

Bevor Sie das Argument "preload" hinzufügen, lesen Sie das Kleingedruckte. – Dimitris

1

Für httpd.conf (wenn Sie Zugriff auf diese zu bearbeiten haben) Sie verwenden können

<VirtualHost 65.81.122.43:443> 
    Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;" 
</VirtualHost> 

Hinweis: Sie müssen es auf dem HTTPS vHost nur festgelegt und kann nicht auf http vHost sein.

Wann sollte und sollte ich keine .htaccess-Dateien verwenden?

Wenn Sie .htaccess-Dateien zulassen, wird Apache bei jedem Zugriff auf Ihren Server nach ihnen suchen. Da auch die übergeordneten Verzeichnisse durchsucht werden, dauert dies einige (kleine) Zeit und kann sich auf die Leistung Ihres Servers auswirken.

+0

Apache wird immer nach .htaccess Dateien suchen. Wenn Sie also die .htaccess-Suche nicht deaktiviert haben, verbessert dies nicht die Leistung, da Apache ohnehin nach der Datei sucht. –

Verwandte Themen