Как форсировать глобальный доступ через HTTPS (HTTP через SSL) в Symfony 1.4

Многие проекты должны будут выполняться в защищенном http-контексте из-за требований на стороне клиента. В приложении PHP это можно сделать с помощью директив Apache или Nginx, однако многие из нас этого не сделают из-за недостатка знаний или просто потому, что вы ленивы.

Такое перенаправление с http на https также может быть выполнено в вашем приложении. Благодаря тому, как работает Symfony 1.4, это можно сделать глобально, и в течение нескольких секунд вы сможете перенаправить любой URL-адрес вашего проекта в его защищенную версию. В этой статье мы покажем вам, как использовать HTTPS глобально в вашем проекте.

1. Создайте фильтр безопасности

Создать sfSecureFilter.class.php файл внутри каталога lib вашего приложения, например apps/frontend/lib/sfSecureFilter.class.php или если вы используете его глобально для всех ваших приложений внутри lib каталог. Этот файл будет содержать в качестве имени файла, sfSecureFilter класс, который расширяет sfFilter Класс Symfony:

getContext();
$request = $context->getRequest();
if (!$request->isSecure())
{
$secure_url = str_replace('http', 'https', $request->getUri());
return $context->getController()->redirect($secure_url);
}
else
{
$filterChain->execute();
}
}
}

Метод execute извлекает контекст и запрос и проверяет, является ли запрос уже защищенным или нет. Согласно протоколу, он будет автоматически изменен на HTTPS, если запрос еще не защищен. Класс сам по себе ничего не делает, если он не присоединен к событию фильтра Symfony, поэтому перейдите к последнему шагу после создания этого файла.

2. Зарегистрируйте фильтр SSL

Теперь, когда у нас есть класс фильтра, который меняет протокол, если он не защищен, нам нужно зарегистрировать его в filters.yml файл вашего приложения, в частности, в фильтре рендеринга, просто добавив свойство класса с именем нашего ранее созданного класса (sfSecureFilter):

# apps//config/filters.yml
# You can find more information about this file on the symfony website:
# https://symfony.com/legacy/doc/reference/1_4/en/12-Filters
# Run the sfSecureFilter before starting the rendering process
rendering:
class:  sfSecureFilter
# Don't enable 'sfSecureFilter' in the security filter as this is only
# executed when a module is secured by some rule on 'security.yml'
security: ~
cache:     ~
execution: ~

После сохранения изменений в filters.ymlочистите кеш вашего проекта php symfony cc и получить доступ к любому маршруту вашего проекта. Теперь вы будете автоматически перенаправлены на HTTPS-версию.

Ссылка на основную публикацию
Adblock
detector