如何在Symfony 3中强制通过HTTPS(基于SSL的HTTP)进行访问

本文概述

  • 要求
  • 实现
  • 建立路线
SSL加密是防止你的数据和用户登录被外部人员拦截和读取的好方法。如果要保护某些路由并确保在Symfony项目中始终通过HTTPS协议对其进行访问, 则需要在单个路由中进行指定, 或者通过在安全性的access_control选项中指定自定义规则来进行指定。 yml文件。
要求
  • 你需要有效的SSL证书, 然后才能在与你的域相关的服务器中启用HTTPS。你可以选择创建自签名证书或购买由证书颁发机构(CA)颁发的证书。
建议如果你正在寻找SSL证书, 我们建议你访问平价SSL商店。 Cheap SSL Shop提供的SSL证书来自全球认可的SSL品牌, 例如RapidSSL, Thawte, GeoTrust, GlobalSign, Comodo, Symantec(VeriSign), 它们的价格可低至每年4.95美元。
如果你不想支付SSL证书的费用, 建议你尝试使用免费, 自动且开放的证书颁发机构Let’ s Encrypt。
确定服务器具有SSL有效证书后, 请继续在Symfony项目中强制使用此协议。请注意, 即使你已安装并可用SSL证书, 除非你这样做, 否则symfony不会强制使用HTTPS。
实现当前在Symfony 3中, 有两种启用HTTPS的方法:
A.单条路线
要在单个路由中强制HTTPS连接, 请使用schemes选项并将其设置为https:
mainbundle_route_identifier:path:/route-namedefaults: { _controller: sandboxmainBundle:Default:action_controller}# Force HTTPSschemes: [https]

随机分发包的routing.yml文件中的示例:
## Project accesible at http://project.com/# 1. None scheme set, http used by defaultmainbundle_homepage: # http://project.com/path:/defaults: { _controller: sandboxmainBundle:Default:index}mainbundle_contact: # http://project.com/conctactpath:/contactdefaults: { _controller: sandboxmainBundle:Default:contact}# 2. Secured by forcing HTTPS in the routesmainbundle_blog: # https://project.com/blogpath:/blogdefaults: { _controller: sandboxmainBundle:Default:blog}schemes: [https]mainbundle_login: # https://project.com/loginpath:/logindefaults: { _controller: sandboxmainBundle:Default:login}schemes: [https]

B.添加安全规则
安全组件提供了另一种通过require_channel设置实施HTTP或HTTPS的方法。这种替代方法更适合于保护网站的” 区域” (/ admin下的所有URL), 而不是手动指定每个路由。
你可以通过在security.yml文件的access_control属性内添加新的路由规则来修改/app/config/security.yml文件, 以指定应用程序具有的URL。此规则需要包含3个属性:
  • path:符合规则的路由。
  • 角色:将应用此规则的角色。
  • require_channel:强制执行的协议(在本例中为https)。
以下示例显示如何使用IS_AUTHENTICATED_ANONYMOUSLY角色(使用该项目的任何人)为项目中的所有路由启用HTTPS:
security:# ... #access_control:- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

或仅用于登录路径:
security:# ... #access_control:- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

建立路线Symfony将根据Twig或PHP的设置(在控制器中)自动根据HTTP或HTTPS的设置生成路由, 因此你无需担心如果用户处于安全路由中会发生什么情况, 重定向到不安全的路由(无论如何, 如果发生一些异常情况, 如果你设置了require_channel或schemes, 它将被自动重定向)。
如果你生成安全路由的URL, 并且当前方案为HTTP, Symfony将自动使用HTTPS生成绝对URL(包括域https://domain.com/secure-route)。
注意:既然HTTPS已启用并可用, 则由于强制加密, 旧的HTTP(不安全)路由将不再可用, symfony会将HTTP URL重定向到它们的等效HTTPS。
【如何在Symfony 3中强制通过HTTPS(基于SSL的HTTP)进行访问】玩得开心 !

    推荐阅读