Wie kann ich SSL in CakePHP hinter einem nginx Reverse Proxy sicher erkennen?

8

CakePHP (alle Versionen, die ich gesehen habe) überprüfen mit $_SERVER['HTTPS'] , ob eine Anfrage über HTTPS statt einfach HTTP gestellt wurde.

Ich verwende nginx als Load-Balancer, hinter dem die Apache-Anwendungsserver stehen. Da die SSL-Verbindung beim Load Balancer beendet wird, ist $_SERVER['HTTPS'] nicht auf CakePHP gesetzt.

Ich möchte einen sicheren Weg finden, um HTTPS auf den App-Servern zu erkennen.

Bisher habe ich das in meine CakePHP-Konfiguration eingefügt:

%Vor%

Und dann habe ich in der nginx-Konfiguration proxy_set_header X-Forwarded-Proto https; verwendet, um das Flag für alle Anfragen zwischen dem Load Balancer und den Backend-Anwendungsservern hinzuzufügen.

Das funktioniert einwandfrei, aber jeder, der eine direkte Anfrage an die App-Server richtet, könnte sie glauben machen, dass sie SSL durchsuchen, wenn sie das nicht tun. Ich bin mir nicht sicher, ob dies ein Sicherheitsrisiko ist, aber es scheint keine gute Idee zu sein.

Ist es ein Sicherheitsrisiko? Was ist die bessere Lösung?

Die Verwendung von X-Forwarded-Proto scheint zu sein etwas von einem Standard , die Lösung könnte ein guter Patch sein, der an den CakePHP-Core übergeben wird, also denke ich, dass jede Antwort legal Core-Dateien bearbeiten kann.

    
Aaron Pollock 13.01.2013, 14:38
quelle

3 Antworten

2

mod_rpaf lässt Sie dies tun.

Dies setzt den HTTPS-Wert in Apache auf "on", basierend auf den Headers, die von nginx gesendet werden, so dass Cake (wie auch alle anderen in Apache ausgeführten Apps) funktioniert.

Es korrigiert auch die Werte für REMOTE_ADDR, SERVER_PORT und HTTP_HOST.

Hier ist mein Beispiel config:

%Vor%     
BigToach 14.11.2013, 08:59
quelle
2

Fügen Sie einen Anfragedetektor hinzu

Bearbeiten Sie den Kern nicht. Wenn du einen Patch einreichen willst, verlasse dich nicht auf deinen Patch, bis nachdem er akzeptiert wurde - ansonsten bist du auf dem Weg zur Divergenz und pflegst deine eigene Gabel von CakePHP.

Sobald Sie Ihre genaue Implementierungslogik festgelegt haben, können Sie einen Anfragedetektor verwenden um es zu ehren.

zum Beispiel:

%Vor%

Danach wird Ihre benutzerdefinierte Kopfzeile korrekt von Kuchen als SSL-Anfrage identifiziert.

Beachten Sie, dass die Schlüssel von $_SERVER global als alle Groß- und Unterstriche, d. h.:

, normalisiert sind %Vor%

Befüllt $_SERVER['HTTP_X_FORWARDED_PROTO'] - als solches ist dies der Schlüssel, nach dem gesucht werden soll.

Konto für (in) Sicherheit

Ja, darauf sollten Sie achten - entweder direkt deaktivieren Zugriff auf Ihre Webserver, damit diese nur über die IP des Loadbalancers überhaupt reagieren kann; oder modifizieren Sie Ihren Detektor so, dass er für Anfragen mit direktem Zugriff nicht wahr ist unabhängig vom Wert des Headers X-Forwarded-Proto - wie in der Dokumentation gezeigt, können Sie einen Callback verwenden, um die erforderliche Logik auszuführen, anstatt einfach nur die Werte einiger Umgebungsvariablen zu testen.

    
AD7six 13.01.2013 16:00
quelle
1

Ich habe den Kommentar von AD7six gefunden - überschreiben Sie die Funktion redirect () - extrem hilfreich in meiner Nur-SSL-Einrichtung, da meine App einige Weiterleitungen zu http hatte.

Ich habe soeben AppController.php hinzugefügt, so dass die Umleitungsfunktion immer https:

verwendet %Vor%     
lorem monkey 27.06.2014 13:29
quelle

Tags und Links