Qué está pasando
Siguiendo las recomendaciones oficiales de seguridad del proyecto PrestaShop, en nuestros servidores de PrestaShop se han deshabilitado ciertas funciones de PHP que los bots maliciosos utilizan habitualmente para atacar tiendas online. Entre ellas se encuentran exec, shell_exec, system, proc_open, popen y otras similares.
Esta medida protege a todas las tiendas del servidor frente a la ola de ataques que sufren las instalaciones de PrestaShop, especialmente las que no están actualizadas. Puedes consultar la recomendación oficial en el blog de seguridad de PrestaShop.
Síntomas que puedes notar en tu tienda
Error 500 en el último paso del checkout al confirmar un pedido.
Pedidos que se crean incompletos (sin todos los productos o sin transportista asignado).
Error 500 al abrir un pedido desde el backoffice.
En el registro de errores (error_log) aparece el mensaje: "Call to undefined function proc_open()".
Fallos en integraciones que ejecutan procesos externos (por ejemplo, sincronizaciones con un ERP).
La causa más habitual: el correo configurado por "PHP mail"
Cuando PrestaShop tiene el correo configurado con la opción de PHP mail(), internamente utiliza la función proc_open para enviar los emails de confirmación de pedido. Al estar deshabilitada esa función por seguridad, el envío del email falla y rompe el proceso de creación del pedido, provocando el error 500 en el checkout.
Solución: configura el correo por SMTP
Accede al backoffice de PrestaShop y ve a Parámetros avanzados > Correo electrónico.
Selecciona la opción "Establecer mis propios parámetros SMTP".
Introduce estos datos:
Servidor SMTP: mail.tudominio.com. Si tu web utiliza Cloudflare, usa en su lugar el nombre del servidor donde está alojada tu cuenta (lo puedes consultar en el cPanel o preguntándonos por el chat), ya que el subdominio de correo pasaría por Cloudflare y la conexión fallaría.
Usuario: una cuenta de correo completa de tu dominio (por ejemplo, [email protected]).
Contraseña: la de esa cuenta de correo.
Cifrado y puerto: SSL con puerto 465 (o TLS con puerto 587).
Guarda los cambios y utiliza el botón de enviar un email de prueba para verificar que funciona.
Vacía la caché de PrestaShop (contenido de var/cache/prod) y realiza un pedido de prueba.
¿Y si un módulo o integración necesita esas funciones?
Si tienes una aplicación o módulo legítimo que requiere alguna de las funciones deshabilitadas (por ejemplo, una sincronización con un ERP), contacta con nuestro equipo de soporte. Analizaremos el caso y valoraremos habilitar la función necesaria para tu cuenta o versión de PHP concreta.
Recomendación final
Mantén siempre tu tienda PrestaShop y todos sus módulos actualizados a las últimas versiones de seguridad. La gran mayoría de los ataques que motivan estas medidas aprovechan tiendas y módulos desactualizados.
