14 marzo, 2021
Aprende a implementar un middleware en Laravel para redirigir automáticamente el tráfico HTTP a HTTPS y mejorar la seguridad de tu aplicación web.
Suscríbete a nuestro canal en Youtube
SuscríbirseEn esta lección aprenderás cómo forzar el uso de SSL (HTTPS) en tu proyecto Laravel. Usar HTTPS es esencial para proteger la comunicación entre tu servidor y los usuarios, ya que cifra la información sensible y mejora la seguridad general de la aplicación.
El protocolo HTTPS asegura que los datos transferidos entre el navegador y el servidor estén cifrados. Esto es crucial para proteger la información personal y las credenciales de los usuarios, además de mejorar la confianza en tu aplicación.
Sigue los pasos que te explico a continuación para redirigir automáticamente todo el tráfico HTTP a HTTPS.
.env
Primero, necesitas asegurarte de que Laravel está configurado para operar en un entorno de producción con HTTPS. Ve a tu archivo .env
y asegúrate de que la URL de tu aplicación comienza con https://
:
bash
APP_ENV=production
APP_URL=https://tusitio.com
De esta forma, Laravel sabrá que tu aplicación está en un entorno de producción y que necesita usar HTTPS.
AppServiceProvider
Luego, vamos a editar el AppServiceProvider.php
para que Laravel redirija todas las solicitudes a HTTPS. Dirígete al archivo app/Providers/AppServiceProvider.php
y agrega lo siguiente en el método boot
:
php
use Illuminate\Support\Facades\URL;
public function boot()
{
if (app()->environment('production')) {
URL::forceScheme('https');
}
}
Este fragmento de código forzará todas las rutas de tu aplicación a utilizar el esquema HTTPS siempre que estés en un entorno de producción.
Si usas Nginx como servidor web, necesitarás agregar una regla de redirección a HTTPS en tu configuración de servidor. Busca o edita tu archivo de configuración de Nginx (/etc/nginx/sites-available/default
, por ejemplo) y añade lo siguiente:
nginx
server {
listen 80;
server_name tusitio.com www.tusitio.com;
return 301 https://$host$request_uri;
}
Esto asegurará que todas las solicitudes HTTP se redirijan automáticamente a HTTPS.
Si usas Apache, edita el archivo htaccess
en la raíz de tu proyecto y agrega el siguiente código:
apache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Con esto, cada vez que alguien intente acceder a tu sitio mediante HTTP, será redirigido a HTTPS.
Es fundamental que tu servidor tenga un certificado SSL válido. Puedes obtener uno gratuito mediante Let's Encrypt, o adquirir uno si deseas opciones avanzadas. Asegúrate de que el certificado esté correctamente instalado en tu servidor.
Ahora te voy a enseñar cómo forzar el uso de SSL en tu proyecto Laravel usando un middleware. El uso de middleware para este propósito te da mayor control sobre qué rutas o grupos de rutas deben estar protegidos con HTTPS.
El primer paso es crear un middleware que fuerce la redirección a HTTPS. Ejecuta el siguiente comando para crear el middleware:
bash
php artisan make:middleware ForceHttps
Este comando creará un nuevo archivo llamado ForceHttps.php
en la carpeta app/Http/Middleware/
.
ForceHttps
Ahora edita el archivo ForceHttps.php
para agregar la lógica de redirección. Dirígete a app/Http/Middleware/ForceHttps.php
y edita el método handle
de la siguiente manera:
php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ForceHttps
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (!$request->secure() && app()->environment('production')) {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
}
Este middleware verifica si la solicitud no es segura (!$request->secure()
) y si la aplicación está en un entorno de producción. Si ambas condiciones se cumplen, redirige automáticamente a la versión HTTPS de la misma URL.
El siguiente paso es registrar el middleware en tu aplicación. Dirígete al archivo app/Http/Kernel.php
y agrega el middleware a la sección middleware
global o al grupo web
. Si quieres que aplique globalmente, colócalo en el array $middleware
:
php
protected $middleware = [
// Otros middlewares...
\App\Http\Middleware\ForceHttps::class,
];
Si prefieres aplicarlo solo a las rutas web, agrégalo en el array $middlewareGroups
dentro del grupo web
:
php
protected $middlewareGroups = [
'web' => [
// Otros middlewares...
\App\Http\Middleware\ForceHttps::class,
],
];
Si solo deseas que ciertas rutas sean forzadas a usar HTTPS, puedes aplicar el middleware de manera selectiva. Ve a tu archivo de rutas web.php
y utiliza el método middleware()
para aplicar el middleware a rutas específicas o grupos de rutas:
php
Route::middleware(['force_https'])->group(function () {
Route::get('/ruta-segura', [SecureController::class, 'index']);
});
Aquí, el middleware force_https
se aplica únicamente a las rutas dentro del grupo.
Leido 15491 veces | 2 usuarios
5 descargas
Para descargar el código crea una cuenta
Crear cuenta© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024