Ich habe nur eine Seite, auf die ich als HTTPS-Seite (PHP unter Apache) zugreifen möchte. Wie mache ich das, ohne dass das gesamte Verzeichnis HTTPS erfordert? Wenn Sie ein Formular von einer HTTP-Seite an eine HTTPS-Seite senden, wird es dann über HTTPS anstelle von HTTP gesendet?
Hier ist mein Beispiel:
http://www.example.com/some-page.php
Ich möchte, dass nur über Folgendes zugegriffen werden kann:
https://www.example.com/some-page.php
Natürlich kann ich alle Links zu dieser Seite, die auf die HTTPS-Version verweisen, einfügen, aber das hindert keinen Dummkopf daran, absichtlich über HTTP darauf zuzugreifen ...
Ich dachte, ich würde eine Umleitung in den Header der PHP-Datei einfügen, um zu überprüfen, ob sie auf die HTTPS-Version zugreifen:
if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
header('Location: https://www.example.com/some-page.php');
}
Aber das kann doch nicht der richtige Weg sein, oder?
Antworten:
Die Art und Weise, wie ich es zuvor gemacht habe, ist im Grunde wie das, was Sie geschrieben haben, hat aber keine fest codierten Werte:
quelle
(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on")
, um PHP-Hinweise zu korrigieren.$_SERVER[]
Variablen nicht veränderbar / anfällig für Benutzereingriffe?HTTP_X_FORWARDED
und können manipuliert werden, andere mögenHTTPS
oderSERVER_PORT
werden direkt vom Webserver festgelegt und sollten normalerweise sicher sein.Sie könnten es mit einer Direktive und mod_rewrite auf Apache tun:
Sie können den Standort im Laufe der Zeit mit regulären Ausdrücken intelligenter gestalten, wenn Sie möchten.
quelle
Sie sollten den Client zwingen , HTTPS immer mit HSTS-Headern ( HTTP Strict Transport Security ) anzufordern:
Bitte beachten Sie, dass HSTS in den meisten modernen Browsern unterstützt wird, jedoch nicht universell. Daher leitet die obige Logik den Benutzer unabhängig von der Unterstützung manuell um, wenn er auf HTTP landet, und setzt dann den HSTS-Header so, dass weitere Clientanforderungen nach Möglichkeit vom Browser umgeleitet werden.
quelle
Ich habe gerade eine .htaccess-Datei erstellt und hinzugefügt:
Einfach!
quelle
quelle
Musste so etwas tun, wenn man hinter einem Load Balancer läuft. Hutspitze https://stackoverflow.com/a/16076965/766172
quelle
Der PHP-Weg:
Der Apache mod_rewrite Weg:
quelle
http://www.besthostratings.com/articles/force-ssl-htaccess.html
Manchmal müssen Sie möglicherweise sicherstellen, dass der Benutzer Ihre Website über eine sichere Verbindung durchsucht. Eine einfache Möglichkeit, den Benutzer immer zur sicheren Verbindung umzuleiten (https: //), kann mit einer .htaccess-Datei erreicht werden, die die folgenden Zeilen enthält:
Bitte beachten Sie, dass sich der .htaccess im Hauptordner der Website befinden sollte.
Wenn Sie HTTPS für einen bestimmten Ordner erzwingen möchten, können Sie Folgendes verwenden:
Die .htaccess-Datei sollte in dem Ordner abgelegt werden, in dem Sie HTTPS erzwingen müssen.
quelle
Ok .. Jetzt gibt es Unmengen von Dingen, aber niemand beantwortet die Frage "Sicher" wirklich. Für mich ist es lächerlich, etwas zu verwenden, das unsicher ist.
Es sei denn, Sie verwenden es als Köder.
Die Weitergabe von $ _SERVER kann nach dem Willen von jemandem geändert werden, der weiß, wie.
Auch wie Sazzad Tushar Khan und der Thebigjc sagten, können Sie auch httaccess verwenden, um dies zu tun, und es gibt hier viele Antworten, die es enthalten.
Einfach hinzufügen:
bis zum Ende dessen, was Sie in Ihrem .httaccess haben und das ist es.
Trotzdem sind wir mit diesen beiden Tools nicht so sicher wie möglich.
Der Rest ist einfach. Wenn Attribute fehlen, z.
Angenommen, Sie haben Ihre httaccess-Datei aktualisiert und überprüfen Folgendes:
Es gibt viel mehr Variablen, die Sie überprüfen können, z.
HOST_URI
(Wenn es statische Attribute gibt, die überprüft werden müssen)HTTP_USER_AGENT
(Gleiche Sitzung unterschiedliche Werte)Alles, was ich sage, ist, sich nicht nur mit dem einen oder anderen zufrieden zu geben, wenn die Antwort in einer Kombination liegt.
Weitere Informationen zum Umschreiben von httaccess finden Sie in den Dokumenten-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
Einige Stapel hier -> Erzwingen Sie SSL / https mit .htaccess und mod_rewrite
und
rufen Sie die vollständige URL des ab aktuelle Seite (PHP)
, um ein paar zu nennen.
quelle
ERR_TOO_MANY_REDIRECTS
. Wie behebe ich das?Verwenden
$_SERVER['HTTPS']
Sie diese Option , um festzustellen , ob es sich um SSL handelt , und leiten Sie an die richtige Stelle weiter, wenn dies nicht der Fall ist.Und denken Sie daran, dass die Seite, auf der das Formular angezeigt wird, nicht über HTTPS eingegeben werden muss. Es ist die Post-Back-URL, die es am meisten benötigt.
Bearbeiten : Ja, wie unten ausgeführt, ist es am besten, den gesamten Prozess in HTTPS zu haben. Es ist viel beruhigender - ich habe darauf hingewiesen, dass der Beitrag der kritischste Teil ist. Außerdem müssen Sie darauf achten, dass Cookies so eingestellt sind, dass sie sicher sind, sodass sie nur über SSL gesendet werden. Die mod_rewrite-Lösung ist auch sehr geschickt. Ich habe sie verwendet, um viele Anwendungen auf meiner eigenen Website zu sichern.
quelle
Verwenden Sie
htaccess
:quelle
Mischen Sie HTTP und HTTPS nicht auf derselben Seite. Wenn Sie eine Formularseite haben, die über HTTP bereitgestellt wird, bin ich nervös, wenn Daten übermittelt werden. Ich kann nicht sehen, ob die Übermittlung über HTTPS oder HTTP erfolgt, ohne eine Ansichtsquelle zu erstellen und danach zu suchen.
Das Bereitstellen des Formulars über HTTPS zusammen mit dem Submit-Link ist keine so große Änderung für den Vorteil.
quelle
Wenn Sie Apache oder etwas wie LiteSpeed verwenden, das .htaccess-Dateien unterstützt, können Sie Folgendes tun. Wenn Sie noch keine .htaccess-Datei haben, sollten Sie eine neue .htaccess-Datei in Ihrem Stammverzeichnis erstellen (normalerweise dort, wo sich Ihre index.php befindet). Fügen Sie nun diese Zeilen als erste Umschreiberegeln in Ihren .htaccess ein:
Sie benötigen die Anweisung "RewriteEngine On" nur einmal in Ihrem .htaccess für alle Umschreiberegeln. Wenn Sie sie bereits haben, kopieren Sie einfach die zweite und dritte Zeile.
Ich hoffe das hilft.
quelle
Dies zu verwenden ist NICHT genug:
Wenn Sie über http-Inhalte verfügen (z. B. eine externe http-Bildquelle), erkennt der Browser eine mögliche Bedrohung. Stellen Sie also sicher, dass alle Ihre ref und src in Ihrem Code https sind
quelle
Ich habe viele Lösungen mit der Überprüfung des Status von $ _SERVER [HTTPS] durchlaufen, aber es scheint nicht zuverlässig zu sein, da es manchmal nicht aktiviert oder aktiviert, deaktiviert usw. wird und das Skript eine interne Schleifenumleitung verursacht.
Hier ist die zuverlässigste Lösung, wenn Ihr Server $ _SERVER [SCRIPT_URI] unterstützt.
Beachten Sie, dass Ihr Server abhängig von Ihrer Installation möglicherweise $ _SERVER [SCRIPT_URI] nicht unterstützt. Wenn dies jedoch der Fall ist, ist dies das bessere Skript.
Sie können hier überprüfen: Warum haben einige PHP-Installationen $ _SERVER ['SCRIPT_URI'] und andere nicht
quelle
Für Benutzer von IIS hilft das Hinzufügen dieser Zeile in der web.config:
Eine vollständige Beispieldatei
quelle
Sie sollten aus Sicherheitsgründen nicht. Besonders wenn hier Cookies im Spiel sind. Sie sind offen für Cookie-basierte Wiederholungsangriffe.
In beiden Fällen sollten Sie Apache-Steuerregeln verwenden, um die Einstellungen zu optimieren.
Anschließend können Sie testen, ob HTTPS aktiviert ist, und bei Bedarf nach Bedarf umleiten.
Sie sollten nur mit einem FORM POST (no get) auf die Bezahlseite umleiten, und der Zugriff auf die Seite ohne POST sollte auf die anderen Seiten zurückgeleitet werden. (Dies wird die Leute nur beim Springen erwischen.)
http://joseph.randomnetworks.com/archives/2004/07/22/redirect-to-ssl-using-apaches-htaccess/
Ist ein guter Anfang, entschuldigt sich dafür, dass Sie nicht mehr zur Verfügung gestellt haben. Aber du solltest es wirklich alles über SSL schieben.
Es ist übermäßig schützend, aber zumindest haben Sie weniger Sorgen.
quelle
Vielleicht kann dieser helfen, Sie, so habe ich es für meine Website gemacht, es funktioniert wie ein Zauber:
quelle
Wenn Sie dazu PHP verwenden möchten, hat dieser Weg für mich sehr gut funktioniert:
Es überprüft die HTTPS-Variable im superglobalen Array $ _SERVER, um festzustellen, ob sie gleich "on" ist. Wenn die Variable nicht gleich on ist.
quelle
Ich habe dieses Skript verwendet und es funktioniert gut über die Website.
quelle
So einfach.
quelle