Как форсировать доступ через HTTPS (HTTP через SSL) в Symfony 3

Шифрование SSL — это хороший способ защитить ваши данные и логины пользователей от перехвата и чтения посторонними. Если вы хотите обезопасить некоторые маршруты и убедиться, что к ним всегда осуществляется доступ по протоколу HTTPS в проекте Symfony, вам потребуется указать либо один маршрут, либо указать пользовательское правило в access_control вариант security.yml файл.

Требования

  • Вам понадобится действительный сертификат SSL, прежде чем вы сможете включить HTTPS на своем сервере, связанном с вашим доменом. Вы можете создать самозаверяющий сертификат или купить сертификат, выданный центром сертификации.

Предложение

Если вы ищете SSL-сертификат, рекомендуем посетить Дешевый SSL Магазин. SSL-сертификаты, предлагаемые Cheap SSL Shop, принадлежат всемирно известным брендам SSL, таким как RapidSSL, Thawte, GeoTrust, GlobalSign, Comodo, Symantec (VeriSign), и они могут быть такими же дешевыми, как и $ 4.95 / год.

Если вы не хотите платить за SSL-сертификат, мы рекомендуем вам попробовать Давайте зашифруем, бесплатный, автоматизированный и открытый центр сертификации.

Убедившись, что на вашем сервере есть действительный сертификат SSL, перейдите к принудительному применению этого протокола в вашем проекте Symfony. Обратите внимание, что даже после того, как у вас установлен и доступен сертификат SSL, Symfony не будет принудительно запускать HTTPS, если вы этого не сделаете.

Реализация

В настоящее время в Symfony 3 есть два способа включить HTTPS:

А. Единый маршрут

Для принудительного подключения HTTPS по одному маршруту используйте schemes параметры и установите его в https:

mainbundle_route_identifier:
path:     /route-name
defaults: { _controller: sandboxmainBundle:Default:action_controller}
# Force HTTPS
schemes: [https]

Пример в routing.yml файл случайного пакета:

## Project accesible at http://project.com/
# 1. None scheme set, http used by default
mainbundle_homepage: # http://project.com/
path:     /
defaults: { _controller: sandboxmainBundle:Default:index}
mainbundle_contact: # http://project.com/conctact
path:     /contact
defaults: { _controller: sandboxmainBundle:Default:contact}
# 2. Secured by forcing HTTPS in the routes
mainbundle_blog: # https://project.com/blog
path:     /blog
defaults: { _controller: sandboxmainBundle:Default:blog}
schemes: [https]
mainbundle_login: # https://project.com/login
path:     /login
defaults: { _controller: sandboxmainBundle:Default:login}
schemes: [https]

Б. Добавить правила безопасности

Компонент Security предоставляет другой способ принудительного применения HTTP или HTTPS через requires_channel установка. Этот альтернативный метод лучше подходит для защиты «области» вашего веб-сайта (все URL-адреса в / admin) вместо указания вручную каждого маршрута.

Вы можете изменить /app/config/security.yml файл, чтобы указать, какие URL-адреса вашего приложения будут иметь, добавив новое правило для маршрута внутри access_control собственность security.yml файл. Этот рул должен содержать 3 свойства:

  • path: Маршрут, соответствующий правилу.
  • rolesРоли, в которых будет применяться это правило.
  • requires_channel: принудительный протокол (в данном случае https).

В следующем примере показано, как включить HTTPS для всех маршрутов в вашем проекте с помощью IS_AUTHENTICATED_ANONYMOUSLY роль (любой, кто использует проект):

security:
# ... #
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

или только для пути входа в систему:

security:
# ... #
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

Создание маршрутов

Symfony позаботится о автоматической генерации маршрутов с помощью HTTP или HTTPS в соответствии с настройками Twig или PHP (в контроллерах), поэтому вам не нужно беспокоиться о том, что произойдет, если пользователь находится в безопасном маршруте, но перенаправляется на небезопасный маршрут (в любом случае, если произойдет что-то необычное, если вы установите requires_channel или же schemes он будет автоматически перенаправлен).

Если вы генерируете URL-адрес защищенного маршрута, и если текущая схема является HTTP, Symfony автоматически сгенерирует абсолютный URL-адрес с HTTPS (включая домен https://domain.com/secure-route).

Замечания: теперь, когда HTTPS включен и доступен, старые HTTP (небезопасные) маршруты больше не будут доступны, потому что вы используете шифрование, Symfony перенаправит URL-адреса HTTP на их HTTPS-эквивалент.

Повеселись !

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