Leider besteht die einzige allgemeine Lösung für dieses Problem darin, Ihren Benutzern die https://
einzige zu geben und sicherzustellen, dass sie damit rechnen , nur diese zu verwenden. Es liegt letztendlich in der Verantwortung des Benutzers, zu überprüfen, ob er erwartungsgemäß SSL / TLS verwendet.
Andere Lösungen sind anfällig für Man-in-the-Middle-Angriffe, selbst wenn die Website nur SSL / TLS-Verbindungen akzeptiert. Angreifer können den Datenverkehr abfangen http://example.com
(wie vom Benutzer angefordert, auch wenn example.com
er diesen Port nicht überwacht ) und ihn ersetzen, indem sie eine eigene Verbindung herstellen und https://example.com
ihn an den Benutzer zurücksenden.
Aus diesem Grund gab es eine OWASP-Regel gegen automatische Umleitungen. Es wurde entfernt, wahrscheinlich weil Weiterleitungen kein schlechter Weg sind, um das Risiko zu mindern (insbesondere gegen passive Lauscher), aber das grundlegende Problem nicht lösen.
Es gibt verschiedene Techniken, mit denen Sie den Benutzer zur HTTPS-Site führen können, und es ist keine schlechte Idee, sie zu verwenden (obwohl sie dadurch nicht vor aktiven MITM-Angreifern geschützt werden).
Erstens, wenn Sie auf dem Webserver nichts haben, das in einfachem HTTP Listen 80
bereitgestellt werden soll, deaktivieren Sie Port 80 (z. B. in der Konfiguration von Apache Httpd entfernen ). Die Benutzer müssen https://
jederzeit verwenden, was unpraktisch sein kann.
Zweitens verwenden Sie in Ihrem Apache Httpd-Konfigurationsabschnitt für einen bestimmten Pfad (entweder Location
oder Directory
) die SSLRequireSSL
Anweisung : Hierfür muss SSL / TLS verwendet werden (auch wenn Sie es tatsächlich an einem alternativen Port konfiguriert haben). Andere Webserver haben wahrscheinlich ähnliche Anweisungen.
Drittens können Sie eine Umleitung verwenden, entweder mit mod_rewrite
oder innerhalb Ihres Codes (wenn es sich um eine Anwendung handelt). So etwas sollte für einen bestimmten Ort reichen ( siehe die HTTPS
spezielle Variable ; Sie können auch 302 verwenden, aber 301 ist besser, wenn dies dauerhafter sein soll):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
Stellen Sie vor allem sicher, dass alle Links zu diesem sicheren Abschnitt verwendet werden https://
. Verlassen Sie sich niemals auf die automatische Umleitung, um die Arbeit für Sie zu erledigen. Aus diesem Grund würde ich empfehlen , es während der Entwicklungsphase überhaupt nicht zu verwenden .
Ich habe jedoch festgestellt, dass ich immer noch nicht sicher auf die Website zugreifen kann, d. H. mit http
anstelle von https
.
Dies klingt auch so, als würden Sie für http
und dieselbe Konfiguration verwenden https
. Wenn Sie Apache Httpd verwenden, würde ich empfehlen, die Konfiguration in zwei verschiedene VirtualHost
s aufzuteilen : eine für Port 80 und eine für Port 443. Sie müssen nicht genau dieselbe Konfiguration haben: Geben Sie nur nicht an, was nur für HTTPS gilt überhaupt im virtuellen HTTP-Host.
Eine Möglichkeit, die oben genannten Probleme zu mindern, besteht darin, HTTP Strict Transport Security für Browser zu verwenden, die dies unterstützen (soweit ich weiß, gilt dies für den gesamten Host). Die allererste Verbindung ist möglicherweise weiterhin verfügbar, wenn sie https://
nicht ohne die Umleitung verwendet wird. Es ist jedoch möglich, dass eine vorinstallierte Liste der erwarteten Websites vorhanden https://
ist (und für HSTS aktiviert ist).