个性化阅读
专注于IT技术分析

如何在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-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。

玩得开心 !

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 3中强制通过HTTPS(基于SSL的HTTP)进行访问

评论 抢沙发

评论前必须登录!