Cómo forzar el acceso globalmente a través de HTTPS (HTTP sobre SSL) en Symfony 1.4

Cómo forzar el acceso globalmente a través de HTTPS (HTTP sobre SSL) en Symfony 1.4

Muchos proyectos deberán ejecutarse en un contexto http seguro debido a los requisitos del lado del cliente. En una aplicación PHP, esto se puede hacer a través de directivas de Apache o Nginx, sin embargo, muchos de nosotros no lo haríamos por falta de conocimiento con esto o simplemente porque es perezoso.

Este redireccionamiento de http a https también se puede realizar dentro de su aplicación. Gracias a la forma en que funciona Symfony 1.4, esto se puede hacer de forma global y en segundos podrás redirigir cualquier URL de tu proyecto a su versión segura. En este artículo, le mostraremos cómo forzar HTTPS globalmente en su proyecto.

1. Crea un filtro de seguridad

Cree el archivo sfSecureFilter.class.php dentro del directorio lib de su aplicación, por ejemplo,  apps/frontend/lib/sfSecureFilter.class.php o si lo usas globalmente en todas sus aplicaciones dentro del directorio lib. Este archivo contendrá como nombre del archivo, sfSecureFilterclase que extiende la clase sfFilter de Symfony:

<?php

// apps/frontend/lib/sfSecureFilter.class.php
// or for all apps
// lib/sfSecureFilter.class.php

class sfSecureFilter extends sfFilter
{
    /**
     * Implementa un redireccionamiento global de la versión 'http' a la 'https'.
     * 
     * @param type $filterChain
     * @return type
     */
    public function execute($filterChain)
    {
        $context = $this->getContext();
        $request = $context->getRequest();

        if (!$request->isSecure())
        {
            $secure_url = str_replace('http', 'https', $request->getUri());

            return $context->getController()->redirect($secure_url);
        }
        else
        {
            $filterChain->execute();
        }
    }
}

El método de ejecución recuperará el contexto y la solicitud y verificará si la solicitud ya está asegurada o no. De acuerdo con su protocolo, se cambiará automáticamente a HTTPS si la solicitud aún no está protegida. La clase por sí sola no hace nada si no está adjunta a un evento de filtro de Symfony, así que continúe con el último paso después de crear este archivo.

2. Registrar filtro SSL

Ahora que tenemos una clase de filtro que cambia el protocolo si no está asegurado, necesitamos registrarlo en el archivo filters.yml de su aplicación, específicamente en el filtro de renderizado simplemente agregando la propiedad de clase con el nombre de nuestra clase creada previamente. ( sfSecureFilter):

# apps/<YourApp>/config/filters.yml

# Puedes encontrar más información sobre este archivo en el sitio web de Symfony:
# https://symfony.com/legacy/doc/reference/1_4/en/12-Filters

# Ejecute sfSecureFilter antes de comenzar el proceso de renderizado
rendering:
  class:  sfSecureFilter

# No habilite 'sfSecureFilter' en el filtro de seguridad ya que esto es solo
# se ejecuta cuando un módulo está protegido por alguna regla en 'security.yml'
security: ~
cache:     ~
execution: ~

Después de guardar los cambios en filters.yml, borre el caché de su proyecto php symfony cc y acceda a cualquier ruta de su proyecto. Ahora, será redirigido automáticamente a la versión HTTPS de siempre.

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable