Intereting Posts
Попытка получить свойство не-объекта в PDO Как установить код ошибки Apache HTTP 503 вместо HTTP 500 при ошибке PHP Резюме / CV Анализ в PHP $ _SERVER не возвращает ip-адрес Внедрение Php Chat Magento – получить все категории, содержащие продукты по брендам Обрезаемая фатальная ошибка: объект класса mysqli_result не может быть преобразован в строку Вычисление средней точки в два раза symfony2: событие presetdata не работает, когда форма является службой Предупреждение: mysqli_connect (): Неизвестный сервер сервера MySQL Как подключить обработчик событий для динамически генерируемых дочерних div? вложенное require_once с абсолютным путём не работает Функция MYSQL DATE работает безумно медленнее в LEFT JOIN Форсировать композитор, чтобы требовать версию PHP между версией X и версией Y Приоритет логических операторов PHP влияет на результаты присваивания переменных странным образом

Как настроить SSL с помощью Laravel 5 за балансировщиком нагрузки (ssl_termination)?

У меня есть проект laravel 5, развернутый в веб-экземплярах AWS EC2, за ELB с завершением ssl.

Для таких вещей, как активы, Laravel по умолчанию использует любую используемую схему. Тем не менее, я заметил, что, поскольку трафик https расшифровывается ELB и перенаправляется в узлы EC2 через http, Laravel не считает, что в настоящее время он использует https и, таким образом, использует http для активов. Это, очевидно, вызывает проблемы.

Из того, что я нашел, Laravel проверяет эту настройку прокси-сервера, используя заголовок X_FORWARDED_PROTO. Однако я нашел, что этот заголовок не существует, и вместо него есть заголовок HTTP_X_FORWARDED_PROTO. Изучая это , я обнаружил, что добавление «HTTP_» – это что-то, что делает php. Если это правда, то почему Laravel не проверяет это, поскольку это чисто php-структура?

Я читал статьи, говорящие, чтобы использовать что-то вроде доверенных прокси Fideloper , но неясно, почему Laravel не проверяет эти заголовки по умолчанию.

Как настроить Laravel для приема заголовков HTTP_X_FORWARDED_ * или настроить его, чтобы узнать, что моя текущая схема – https?

Laravel не проверяет их по умолчанию, потому что эти заголовки могут быть тривиально введены в запрос (т. Е. Поддельные), и это создает теоретический вектор атаки в ваше приложение. Злоумышленник может заставить Laravel думать, что запрос является или не является безопасным, что, в свою очередь, может привести к компрометации.

Когда я столкнулся с этой проблемой еще несколько месяцев назад, используя Laravel 4.2, я решил создать собственный класс запросов и сообщить Laravel о его использовании

#File: bootstrap/start.php //for custom secure behavior -- laravel autoloader doesn't seem here yet? require_once realpath(__DIR__) . 'path/to/my/MyCustomRequest.php'; Illuminate\Foundation\Application::requestClass('MyCustomRequest'); 

а затем в MyCustomReuqestClass , я расширил класс базового запроса и добавил дополнительную / не-безопасную логику

 class Request extends \Illuminate\Http\Request { /** * Determine if the request is over HTTPS, or was sent over HTTPS * via the load balancer * * @return bool */ public function secure() { $secure = parent::secure(); //extra custom logic to determine if something is, or is not, secure //... return $secure; } public function isSecure() { return $this->secure(); } } 

Я бы этого не сделал . После работы с каркасом в течение нескольких месяцев я понял, что класс запроса Laravel имеет класс запроса Symfony в качестве родителя, то есть запрос Laravel наследует поведение объекта запроса Symfony.

Это означает, что вы можете сказать Laravel, какие прокси-серверы ему должны доверять, например,

 Request::setTrustedProxies(array( '192.168.1.52' // IP address of your proxy server )); 

Этот код сообщает Laravel, какие доверенные серверы ему следует доверять. После этого он должен забрать стандартные «переадресованные» заголовки. Вы можете узнать больше об этой функциональности в документах Symfony .