Wie kann der Zugriff auf eine Website ohne SSL-Verbindung verhindert werden?

11

Ich habe eine Website , die ein SSL - Zertifikat installiert ist, so dass , wenn ich auf die Website zugreifen verwenden , httpsanstatt httpich in der Lage sein wird , über eine sichere Verbindung zu verbinden.

Ich habe jedoch festgestellt, dass ich immer noch nicht sicher auf die Website zugreifen kann, d. H. mit httpanstelle von https.

Wie kann ich verhindern, dass Personen die Website auf nicht sichere Weise nutzen?

Wenn ich ein Verzeichnis auf der Website habe, z. samples/Kann ich nicht sichere Verbindungen nur zu diesem Verzeichnis verhindern?

CJ7
quelle

Antworten:

12

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).

Bruno
quelle
Gute Informationen, wie macht Google Mail das? - Wie es aussieht, erzwingen sie https.
Toomanyairmiles
3
Sie verwenden eine Umleitung. Dies funktioniert einwandfrei, vorausgesetzt, Sie, wie der Benutzer es erwartet https://mail.google.com. Wenn Sie als Benutzer sehen, dass es funktioniert http://mail.google.com, gibt es wahrscheinlich ein MITM, das die Anforderungen an das Original weiterleitet https://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.
Bruno
Ich habe einige PHP-Skripte gesehen, die überprüfen, ob sie mit HTTPS verbunden sind, und umleiten, wenn SSL nicht an eine HTTPS-Adresse verwendet wird. Dies ist natürlich keine leichte Aufgabe, es sei denn, Sie erstellen Ihre Site jetzt.
Anonymer Pinguin
@AnnonomusPerson, das ist genau das gleiche Prinzip und genau das macht die Umschreiberegel von HTTP zu HTTPS. Ob Sie dies programmgesteuert oder durch Konfiguration tun, spielt keine Rolle, es handelt sich immer noch um eine Umleitung mit einer anfänglichen Anforderung in einfachem HTTP, die das gleiche Problem darstellt.
Bruno
3

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.

RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L] 
toomanyairmiles
quelle
Können Sie dies nur für bestimmte Unterverzeichnisse ermöglichen?
CJ7
@CraigJ Entschuldigung, habe den Teil des Unterverzeichnisses verpasst, Antwort aktualisiert.
Toomanyairmiles
3
Dies reduziert zwar die Risiken geringfügig, funktioniert jedoch nicht gegen aktive MITM-Angreifer.
Bruno
0

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).

Tobu
quelle