2016-08-07 38 views
1

In meiner .htaccess-Datei, ich habe folgende Regel erstellt, um sicherzustellen, ist es immer HTTPS:Ist dies sicher anzunehmen, dass es sich nicht um https handelt?

# Redirect To HTTPS... 
RewriteCond %{SERVER_PORT} !=443 
RewriteRule^https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 

Ist es sicher davon ausgehen, dass jeder Port 443 auf HTTPS umgeleitet werden sollte? Sollen auch andere Häfen zu bestimmten Anlässen zugelassen werden? Ich möchte, dass meine Website niemals unverschlüsselt zugestellt wird.

Antwort

2

Fügen Sie die untenstehende Regel zu Ihrem .htaccess hinzu, es macht https unabhängig vom Port und umleitet alle HTTP-Verkehr zu https.

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{HTTPS} off 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

Würde ein besseres Beispiel, wenn Sie erklärt, warum -, dass eine Filterung auf Basis von Port-Auswahl ist nutzlos, aber Stattdessen filtern Sie nach dem verwendeten Protokoll. Aber trotzdem eine gute Lösung. –

+0

Gute Sache mit diesem HTTPS aus! Aber mit HTTP_HOST ist schlechte Idee, dieser Wert verwendet 'Host' Header vom Client gesendet - verwenden Sie es nicht! –

+0

Und noch eine Sache - es ist besser zu tun "= aus" statt "aus". Das vergessen die Menschen sehr oft - ohne '=' es ist ein regelmäßiger Ausdruck! Es gibt kleine Leistungseinbußen, aber es ist nicht so wichtig.Schlimmer noch, es passt auch zu "Abseits", "Abzocke" usw. Etwas, an das man sich erinnert, wenn wir solche Werte verwenden, bei denen es mehr Möglichkeiten als nur Ein- und Ausschalten gibt. –

1

-Port 80 und 443 sind die Standard-Ports für HTTP/HTTPS gemäß dem RFC documentaion http://www.rfc-editor.org/rfc/rfc2616.txt. Browser verwenden diese Ports automatisch für die Verbindung mit diesen Protokollen. Port-Nummern müssen dem Browser zur Verfügung gestellt werden, wenn nicht 80/443.

Wenn Sie also keinen Grund haben, von Nicht-Standard-Ports zu liefern, können Sie von Port 80 zu 443 umleiten. Sie müssen einen catch all redirect auf 443 verwenden, falls Sie einen anderen Port für HTTP-Verbindungen verwenden gleichermaßen mit einem Port 80 Redirect und dann Hinzufügen weiterer Ports zum Serving wird nicht umleiten.

Es gibt viele Möglichkeiten, die Umleitung basierend auf Ihren Anforderungen zu schreiben.

Ein Beispiel für einen Port 80 Umleitung:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 
+0

Wieder. 'RewriteCond% {SERVER_PORT} 80' ist nicht Port 80. Es ist Port, der in seiner Nummer" 80 "enthält. Hast du das gemeint? Ich denke nicht. –

+1

Plus, warum fangen Sie Regex von der URI, wenn Sie es nicht brauchen? Verwenden Sie stattdessen {REQUEST_URI}. –

+1

Und das letzte - Sie möchten wahrscheinlich permanent umleiten, nicht vorübergehend. Verwenden Sie R = 301. –

1

sofern nicht explizit fragen, Browser nur auf Port 80 (oder 443, wenn https angegeben) verbinden. Ihr Webserver sollte nur auf Port 80 und 443 zu hören, so dass Sie nur den Port umgeleitet haben 80

Wenn Sie möchten, dass Sie immer https dienen, dann sollten Sie HSTS hinzufügen und Vorspannung Ihre Website:

https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security

https://hstspreload.appspot.com/

HSTS ist ein Header, der nur mit dem Browser mitteilen zu https zu verbinden, nie http, aber es funktioniert nur nach einer ersten erfolgreichen Verbindung (so die erste Verbindung unsicher sein kann). Wenn Sie es vorab laden, wissen die Browser, dass Ihre Website https nur vor den ersten Besuchen verwendet, so dass sie es auch schützen können.

1

Wenn Sie die Apache-Konfiguration kontrollieren und sich um Performance-Treffer kümmern, müssen Sie .htaccess und mod_rewrite nicht verwenden. Dadurch wird vermieden, dass .htaccess für jede Webanforderung geladen und analysiert wird.

Verwenden Sie einfach diese einfache Redirect-Direktive in Ihren virtuellen Host config:

<VirtualHost *:80> 
    ServerName www.example.com 
    Redirect "/" "https://www.example.com/" 
</VirtualHost> 

Lesen Sie mehr über: when not to use mod_rewrite

+1

Ja, ich habe es auch schon gefunden. Ich werde wahrscheinlich versuchen, meine .htaccess-Regeln in der Serverkonfiguration widerzuspiegeln. –