Wie konfiguriere ich SSL mit Laravel 5 hinter einem Load Balancer (ssl_termination)?

8

Ich habe ein Laravel 5-Projekt auf AWS EC2-Webinstanzen hinter einem ELB mit SSL-Terminierung implementiert.

Für Dinge wie Assets verwendet Laravel standardmäßig das Schema, das derzeit verwendet wird. Allerdings ist mir aufgefallen, dass der https-Verkehr vom ELB entschlüsselt und über http an die EC2-Knoten weitergeleitet wird. Laravel glaubt nicht, dass er derzeit https verwendet und nutzt daher http für Assets. Dies verursacht offensichtlich Probleme.

Nach dem, was ich gefunden habe, überprüft Laravel diese Art von Proxy-Setup mit dem Header X_FORWARDED_PROTO. Ich habe jedoch gefunden, dass dieser Header nicht existiert und stattdessen gibt es einen HTTP_X_FORWARDED_PROTO Header. In forschen , ich habe festgestellt, dass das Voranstellen von "HTTP_" etwas ist, was PHP tut. Wenn das stimmt, warum überprüft Laravel dann nicht, da es sich um ein reines PHP-Framework handelt?

Ich habe Artikel gelesen, in denen ich sage, dass ich etwas wie Fidelopers Trusted Proxies verwenden soll, aber es ist unklar, warum Laravel nicht danach sucht Header standardmäßig.

Wie kann ich Laravel so konfigurieren, dass HTTP_X_FORWARDED_ * -Kopfzeilen akzeptiert werden, oder anderweitig konfigurieren, dass mein aktuelles Schema https?

ist?     
maherio 01.05.2015, 17:52
quelle

1 Antwort

6

Laravel prüft diese nicht standardmäßig, da diese Header trivial in eine Anfrage eingefügt werden können (d. h. gefälscht) und dies einen theoretischen Angriffsvektor in Ihrer Anwendung erzeugt. Ein böswilliger Benutzer kann Laravel denken lassen, dass eine Anfrage nicht sicher ist, was wiederum dazu führen könnte, dass etwas kompromittiert wird.

Als ich vor einigen Monaten mit dem gleichen Problem in Laravel 4.2 antrat, bestand meine Lösung darin, eine benutzerdefinierte Anfrageklasse zu erstellen und Laravel zu empfehlen, sie zu verwenden.

%Vor%

und dann in MyCustomReuqestClass , habe ich die Basisanforderungsklasse erweitert und zusätzliche is / is-not secure-Logik hinzugefügt

%Vor%

Ich würde das jetzt nicht tun . Nachdem ich einige Monate mit dem Framework gearbeitet hatte, wurde mir klar, dass die Anforderungsklasse von Laravel die Symfony-Anforderungsklasse als übergeordnetes Element hat, was bedeutet, dass eine Laravel-Anfrage das Verhalten eines Symfony-Anforderungsobjekts erbt.

Das bedeutet, dass Sie Laravel sagen können, welchen Proxy-Servern er mit so etwas vertrauen sollte

%Vor%

Dieser Code teilt Laravel mit, welchen Proxy-Servern er vertrauen sollte. Danach sollte es die standardmäßigen Header "forward for" übernehmen. Sie können mehr über diese Funktionalität in den Symfony-Dokumenten lesen.

    
Alan Storm 01.05.2015, 18:49
quelle