Mejorando la gestión de cookies de localización en landing

Introducción

En el proyecto landing, estamos mejorando la manera en que gestionamos las cookies de localización. Específicamente, hemos abordado un problema donde la cookie encriptada que guarda la localización del usuario podía fallar al desencriptarse entre diferentes despliegues o cuando Cloudflare interceptaba las redirecciones. Esto afectaba la capacidad de los usuarios para cambiar de idioma en el sitio.

El Problema con la Encriptación de la Cookie

Originalmente, la cookie que almacenaba el idioma seleccionado por el usuario (ej: 'en', 'es', 'fr', 'de') se encriptaba. Esto tenía la intención de añadir una capa de seguridad. Sin embargo, en la práctica, la encriptación introdujo varios problemas:

  • Dependencia del entorno: Las claves de encriptación podían cambiar entre despliegues, haciendo que las cookies generadas previamente fueran inválidas.
  • Interferencia de Cloudflare: Cloudflare, al interceptar y modificar las redirecciones, podía corromper la cookie encriptada.

Estos problemas resultaban en una experiencia inconsistente para el usuario, especialmente al intentar cambiar el idioma del sitio.

La Solución: Almacenamiento en Texto Plano

La solución adoptada fue dejar de encriptar la cookie de localización y almacenarla directamente como texto plano. Esto puede parecer un riesgo de seguridad, pero en este caso, es aceptable por las siguientes razones:

  • Validación estricta: El valor de la cookie se valida contra una lista predefinida de valores permitidos ('en', 'es', 'fr', 'de') en el backend. Esto se realiza mediante la función SetLocale. Cualquier valor fuera de esta lista es rechazado, previniendo inyecciones o manipulaciones maliciosas.
  • Simplicidad y robustez: Eliminar la encriptación simplifica la gestión de la cookie y elimina la dependencia de las claves de encriptación del entorno.

Ejemplo de Validación en PHP

Aquí hay un ejemplo simplificado de cómo se puede validar el valor de la cookie en PHP:

<?php

$allowed_locales = ['en', 'es', 'fr', 'de'];
$locale = $_COOKIE['locale'] ?? null;

if ($locale !== null && in_array($locale, $allowed_locales, true)) {
    // El valor de la cookie es válido
    $currentLocale = $locale;
} else {
    // El valor de la cookie no es válido, usar el idioma por defecto
    $currentLocale = 'en';
}

echo "Idioma actual: " . $currentLocale;

?>

Este código primero define una lista de idiomas permitidos. Luego, recupera el valor de la cookie 'locale'. Si la cookie existe y su valor está en la lista de idiomas permitidos, se utiliza ese valor. De lo contrario, se utiliza el idioma por defecto ('en' en este caso).

Conclusión

La decisión de almacenar la cookie de localización como texto plano, validando su valor en el backend, mejoró la robustez y la fiabilidad de la funcionalidad de cambio de idioma en landing. Aunque la encriptación puede parecer la opción más segura a primera vista, en algunos casos, la simplicidad y la validación estricta pueden ser una mejor solución.

Prueba esto en tu código: Si estás encriptando cookies que contienen valores predecibles y estás teniendo problemas de despliegue o compatibilidad, considera remover la encriptación y validar los valores en el servidor. La validación es clave para garantizar la seguridad.

Mejorando la gestión de cookies de localización en landing
GERARDO RUIZ

GERARDO RUIZ

Author

Share: