Содержание
Шифрование 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-эквивалент.
Повеселись !