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.comer diesen Port nicht überwacht ) und ihn ersetzen, indem sie eine eigene Verbindung herstellen und https://example.comihn 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 80bereitgestellt 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 Locationoder Directory) die SSLRequireSSLAnweisung : 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_rewriteoder innerhalb Ihres Codes (wenn es sich um eine Anwendung handelt). So etwas sollte für einen bestimmten Ort reichen ( siehe die HTTPSspezielle 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 httpanstelle von https.
Dies klingt auch so, als würden Sie für httpund dieselbe Konfiguration verwenden https. Wenn Sie Apache Httpd verwenden, würde ich empfehlen, die Konfiguration in zwei verschiedene VirtualHosts 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).