Sin impuesto Con impuesto

Pasaste una URL de cron por WhatsApp y se ejecutó sola

Gustavo avisó en el grupo de que WhatsApp abre los enlaces que compartes para generar la vista previa, y con una URL de cron eso basta para ejecutar la tarea. Explicamos por qué pasa, qué otras herramientas hacen lo mismo y cómo proteger tus tareas programadas.

Equipo Rekire
Actualizado: 21/08/2023 8
Pasaste una URL de cron por WhatsApp y se ejecutó sola
Compartir:

Gustavo, de la comunidad, lanzó este aviso en agosto de 2023: si compartes por WhatsApp una URL que ejecuta algo, por ejemplo la de una tarea programada (cron), WhatsApp la visita como si fuera un navegador y la tarea se ejecuta. Nadie ha pulsado nada. Otro miembro lo confirmó: es lo mismo que hace WhatsApp con cualquier enlace para sacar el título y la imagen de la vista previa.

Por qué pasa

Para enseñarte la tarjeta con título, descripción e imagen, la aplicación descarga la página del enlace. Lo hacen WhatsApp, Telegram, Slack, muchos clientes de correo y los antivirus que revisan los enlaces de los mensajes. Para tu servidor, esa visita es una petición más. Si la URL lanza una importación de catálogo, una actualización de precios, un envío masivo de correos o una limpieza de la base de datos, eso es lo que acabas de lanzar.

El problema no es WhatsApp. El problema es tener una URL que hace algo con solo abrirla, y que esa URL salga de tus manos: un mensaje al cliente, una captura, un ticket de soporte, una nota compartida.

Qué hacer

No compartas URL que ejecutan cosas

Si tienes que pasarle a alguien la dirección de un cron, pásale la ruta o una captura en la que no se lea el token, nunca el enlace completo. Y si ya la has compartido, cambia el token: muchos módulos tienen un botón para regenerarlo en su configuración.

Si el cron es tuyo, exige un token

Una URL de tarea programada debería comprobar siempre una clave larga y aleatoria antes de hacer nada. En un script de módulo de PrestaShop puede ser algo así:

$esperado = (string) Configuration::get('MIMODULO_CRON_TOKEN');
$token = (string) Tools::getValue('token');

if ($esperado === '' || !hash_equals($esperado, $token)) {
    http_response_code(403);
    exit;
}

hash_equals compara sin dar pistas por el tiempo de respuesta, y la primera condición evita que un token vacío deje pasar a cualquiera. Ojo: el token protege de quien no lo conoce, no de la vista previa de un enlace que ya lo lleva dentro. Adáptalo a tu módulo y pruébalo antes en una copia de la tienda.

Mejor desde el servidor que por URL

Si tu hosting te deja programar tareas en el panel y el módulo lo permite, ejecuta el script con PHP desde el propio servidor en lugar de con una llamada a una URL pública. Así no hay enlace que compartir ni que encontrar.

Que repetir la tarea no haga daño

Diseña las tareas para que ejecutarlas dos veces seguidas no estropee nada: que una importación no duplique productos, que un envío no mande dos veces el mismo correo, que una limpieza no borre lo que no toca. Y guarda un registro con la hora de cada ejecución: si un día se lanza a deshora, lo verás.

Lo mismo vale para otras URL

Enlaces de «confirmar», «borrar» o «regenerar» en el back-office de un módulo, enlaces de un solo uso para un cliente, URL de webhooks: cualquier dirección que cambie algo con una simple visita puede dispararse sola en cuanto la pegues en un chat. Lo que modifica datos debería pedir un clic sobre un formulario o una petición POST, no una visita.

Si quieres que revisemos las tareas programadas de tu tienda y cómo están protegidas, lo hacemos dentro de los bonos de horas de Rekire.

Esto salió en @PrestashopEsp, la mayor comunidad PrestaShop de España en Telegram. Ver la conversación

Cargando...
Cookies
Volver arriba