Erzwinge https auf der gesamten Site, ohne http auf https umzuleiten

14

Es gab viele Diskussionen, während ich nachforschte, wie ich meine gesamte Site https machen kann. Die meisten Antworten lauteten, http auf https (.htaccess-Datei) umzuleiten, was nicht gut ist, da es nicht gut ist, denselben Job zweimal auszuführen (zwei Anfragen). Außerdem übernimmt der "Mann in der Mitte" zuerst http, und ich möchte, dass meine Website direkt auf https geschaltet wird. Gibt es eine andere Möglichkeit, Ihre gesamte Site mit https zu versehen, und wie geht das? Wenn der Benutzer beispielsweise example.com eingibt, wechselt diese example.com automatisch zu https, ohne vorher von http oder etwas anderem umzuleiten.

Marko Tamburic
quelle
Wenn Sie nicht möchten, dass Personen zu https umgeleitet werden, was möchten Sie stattdessen tun?
Michael Hampton
@MichaelHampton Vielleicht stelle ich Neulingen eine Frage, aber ich möchte http praktisch "löschen", und das einzige, was existiert, ist https. Oder wenn dies nicht möglich ist, kann ich die Umleitung verwenden, wenn dies für die Sicherheit ausreicht. Ich habe gehört, dass die Umleitung http-> https nicht so gut ist, weil sie immer noch http ist und der Datenverkehr während der Umleitung abgefangen werden kann.
Marko Tamburic
HTTP 301 permanente Weiterleitung ist dein Freund, vergiss aber nicht, das Ablaufdatum festzulegen.
Marcel
Sie können nur http entfernen. Der Benutzer erhält jedoch nur eine Nachricht, dass die Verbindung abgelehnt wurde, wenn er nicht https: // eingibt. Für einige Websites ist dies besser, da die Sicherheit höher ist. Wenn eine http-Version verfügbar ist, kann es vorkommen, dass Cookies bei der ersten Anforderung unverschlüsselt gesendet werden. Für Dinge wie ein Firmen-Mailsystem ist nur https + Benutzerschulung in Ordnung, für eine allgemeine Site werden Sie wahrscheinlich eine Menge Besucher verlieren.
Josef
Afaik es wurde möglich mit HTTP2, aber es wird immer noch nicht SSL-Striping-Angriff vermeiden (in den Antworten unten beschrieben).
peterh

Antworten:

20

Nein. Sie können den Browser des Besuchers nicht auf magische Weise dazu bringen, das richtige Protokoll auszuwählen. Eine Umleitung ist der Weg, um es zu tun.

Jenny D
quelle
1
Um diese Antwort weiter zu erweitern, sollten Sie URL-Umschreiben und einen 301-Statuscode verwenden, wie Mark Henderson hier ausführt
Ryan Ries
22

Mit http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security kann Ihr Server angeben, dass auf die Domain nur über HTTPS zugegriffen werden soll. Dies gilt nur für nachfolgende Anforderungen, sodass ein anfängliches HTTP-Laden erfolgt. Zukünftige Anforderungen würden jedoch HTTPS laden, selbst wenn jemand HTTP explizit eingibt.

IE unterstützt es noch nicht, aber alle anderen Majors tun es.

ceejayoz
quelle
Es schützt immer noch nicht vor der ersten Anfrage.
Jenny D
3
@JennyD Genau das habe ich in meiner Antwort schon gesagt.
ceejayoz
@JennyD Was meinst du mit "schützen"? Ein MiM kann nichts gegen eine http -> https-Umleitung tun, es sei denn, sie manipulieren das lokale DNS / Routing und täuschen Ihre gesamte Domain vor. In diesem Fall spielt es keine Rolle, was Sie tun, da auf Ihre Server nie zugegriffen wird.
Red Alert
2
@JennyD Nun, HSTS ist wirklich eine bessere Lösung als Ihr Beitrag, in dem steht, "ein Redirect ist der Weg, dies zu tun". Eine Weiterleitung kann jederzeit MITMed werden. Eine Weiterleitung mit HSTS kann nur einmal im Jahr pro Benutzer + Browser (oder unabhängig von der Ablaufzeit in der Kopfzeile) MITMed werden - ansonsten wird sie nicht angefordert.
ceejayoz
1
@MarkoTamburic Kein Grund, die beiden nicht zu kombinieren.
Ceejayoz
7

Wie andere gesagt haben, können Sie Benutzer nicht zwingen, das richtige Protokoll zu wählen. Was sollten Sie tun, wenn der Benutzer versucht, HTTP zu verwenden? Eine Umleitung ist ebenfalls unzureichend, da ein Angreifer, der zwischen Ihnen und dem Client sitzt, die Umleitung abfangen kann, sodass der Client sie nie sieht. Der Client sendet weiterhin normales HTTP und der Angreifer entfernt die SSL-Schicht vom Server ( SSL-Stripping-Angriff ).

Der einzig sichere Weg, dies zu verhindern, besteht darin , HTTP überhaupt nicht zu bedienen . Antworten Sie nicht auf Port 80, es sei denn, Sie stellen eine Nur-Text-Seite bereit, die den Benutzer anweist, es erneut mit HTTPS zu versuchen (ohne jedoch einen Link bereitzustellen, den der Angreifer manipulieren könnte). Dadurch wird der Benutzer gezwungen, https://in seinen Browser zu tippen , um die Verbindung mit SSL herzustellen und den MITM-Angriff zu verhindern.

Andrew Schulman
quelle
3
Es ist jedoch ein Kompromiss, da die meisten Benutzer nicht tippen werden https://. Stattdessen werden sie "huh, die Seite ist kaputt" sagen und gehen. Das beste Szenario könnte darin bestehen, www.example.comsowohl auf HTTP als auch auf HTTPS zu reagieren, die App selbst jedoch auf so etwas wie admin.example.comnur mit HTTPS auszuführen.
ceejayoz
Einverstanden. In der Praxis macht das fast niemand.
Andrew Schulman
Ich sehe nicht wirklich, wie das mehr MiM-Beweis sein würde. Wenn der Mann in der Mitte Ihren Hyperlink so ändern kann, dass er auf eine andere Stelle verweist, hat er die Kontrolle über die eingehenden Pakete des Benutzers. Er kann genauso einfach zu seiner Site umleiten oder einen beliebigen Hyperlink einfügen, unabhängig davon, wie die Site aussehen soll.
Red Alert
Theoretisch jedoch nicht, wenn der Client die Verbindung mit SSL initiiert.
Andrew Schulman
3
Das stimmt - aber wenn der Client mit SSL initiiert, hat OP kein Problem. Sein Problem ist, wenn sie ohne SSL initiiert werden und es keine Möglichkeit gibt, sie zuverlässig auf SSL zu bringen, wenn eine MiM dies aktiv sabotiert.
Red Alert
1

ceejayoz hat die beste Antwort, um den hier speziell erwähnten Angriff zu verhindern, aber ich möchte auch darauf hinweisen, was viele Leute hier vermissen, im Grunde genommen hat HTTP den anderen Teil bereits herausgefunden. Sie möchten eine permanente 301-Umleitung durchführen. Dadurch wird der Client angewiesen, weitere Anforderungen an die neue Adresse zu richten. Also ja, wenn jemand die falsche URL eingibt, wird er 2 Anfragen stellen, ABER in Zukunft sollte ein guter Client Anfragen an diese URL erkennen und stattdessen die richtige Anfrage stellen, um weitere verschwendete Anfragen zu vermeiden. Das Problem ist, dass dies nur für genau diese URL gilt. HSTS verbessert dieses Schema, indem es auch sagt, dass für die nächsten n Sekunden auch keine nicht sicheren Verbindungen von dieser Domäne zugelassen werden.

Benutzer sollten keine sensiblen Sites an unsicheren Standorten besuchen. Sie sollten sich insbesondere nicht an unsicheren Orten für sie anmelden. Hierbei handelt es sich um grundlegende Prinzipien der Benutzersicherheit, die wie folgt vermittelt werden sollten: Öffnen Sie keine Anhänge aus nicht vertrauenswürdigen Quellen. Welches sind wirklich die beste Antwort, um MiM-Angriffe für Websites zu verhindern, die noch nie besucht wurden.

Nebenbei bemerkt, einige Browser verbessern dies, indem sie auch sagen, dass bestimmte bekannte Websites immer HSTS verwenden. Leider können Sie sich nicht einfach dieser Liste hinzufügen.

Weitere Informationen: http://coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/

http://dev.chromium.org/sts

krowe
quelle