本文概述
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-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]
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。
玩得开心 !
评论前必须登录!
注册