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).
https://mail.google.com
. Wenn Sie als Benutzer sehen, dass es funktionierthttp://mail.google.com
, gibt es wahrscheinlich ein MITM, das die Anforderungen an das Original weiterleitethttps://mail.google.com
. Leider kann Google Mail nicht viel dagegen tun, wenn die Nutzer selbst dies nicht überprüfen. Gleiches Prinzip wie im wirklichen Leben: Wenn Alice mit Bob sprechen möchte, aber stattdessen mit Chuck (der behauptet, Bob zu sein) spricht, ohne die ID zu überprüfen, weiß Bob nichts über dieses Gespräch und kann es nicht irgendetwas darüber. Es liegt in Alices Verantwortung.Sie müssen lediglich den http-Verkehr zu https umleiten - siehe diesen Artikel 'http zu https umleiten Apache sichere Verbindung - HTTPS-Verbindungen erzwingen' .
Für ein Unterverzeichnis legen diese in einer .htaccess - Datei in das Verzeichnis selbst.
quelle
Das Erzwingen des Zugriffs über HTTPS ist in der Tat möglich und ein notwendiger Schritt, um Ihre Site MITM-, Snooper- und PEBKAC-sicher zu machen. Es sollte nicht in der Verantwortung des Benutzers liegen, das funktioniert nicht . Ermutigen Sie Ihre Benutzer, stattdessen sichere Browser zu verwenden.
Das Erzwingen von HTTPS erfolgt über HSTS ( HTTP Strict-Transport-Security ). Basic HSTS ist sicher, nachdem der Benutzer zum ersten Mal über HTTPS auf Ihre Site zugegriffen hat (in allen unterstützenden Browsern; IE ist nicht in der Lage ). Vorinstalliertes HSTS ist immer sicher und deckt die modernen Fast-Release-Browser (Chromium und Derivate, Firefox) ab.
Eine umfassendere Übersicht über die HTTP-Sicherheit (Adressierung von URLs, Weiterleitungen, Cookies und gemischten Inhalten) finden Sie in dieser Anleitung zur HTTPS-Migration . HSTS ist der letzte Schritt in einer progressiven Migration. Sie müssen der Bestellung nicht wirklich folgen, wenn Ihre Website brandneu ist.
Verwandte Standards: Sichere Cookies (wichtig, wenn Ihre Cookies länger als der HSTS-Header gespeichert sind), HttpOnly-Cookies (während Sie Ihre Cookies sichern), HPKP (für moderne Browser und einfallsreichere Angreifer).
quelle