Documentación · Privacidad, seguridad y cumplimiento

Recomendaciones de seguridad

Este documento recopila recomendaciones prácticas de seguridad para sitios que ejecutan el plugin ADP Car Market Hub. Se centra en el bastionado operativo, las protecciones integradas del plugin y los controles que los operadores del sitio deben configurar además del bastionado estándar de WordPress.

Este documento no sustituye a una auditoría de seguridad completa y no garantiza que el sitio esté libre de vulnerabilidades. Los operadores del sitio deben revisar su configuración de hosting, la configuración de WordPress y las integraciones de terceros con un especialista en seguridad cualificado cuando sea necesario.

Cuándo utilizar este documento

Utilice este documento cuando necesite:

  • Preparar un sitio que utiliza el plugin para su uso en producción.
  • Revisar los controles de seguridad integrados del plugin.
  • Planificar medidas de seguridad operativas (credenciales, cron, registro, copias de seguridad).
  • Responder a una revisión o cuestionario de seguridad interna.

Descripción general

El plugin se basa en las primitivas de seguridad estándar de WordPress:

  • Capacidades de WordPress (capacidad personalizada del plugin manage_as24_imports para acciones de gestión; capacidades por CPT para las publicaciones de vehículos).
  • Nonces de WordPress en cada formulario de administración, acción AJAX y controlador POST de administración.
  • Funciones auxiliares estándar de saneamiento y escape de WordPress (sanitize_*, wp_kses_post, esc_*, wp_unslash).
  • Transients de WordPress para estados de corta duración (límites de tasa, bloqueos de ejecución).
  • El TLS existente del sitio, la protección de inicio de sesión, los permisos de archivos y la seguridad de la base de datos.

El plugin añade varias protecciones específicas de características sobre esas primitivas, que se enumeran en la siguiente sección.

Protecciones integradas

Los comportamientos a continuación reflejan lo que implementa el código del plugin hoy en día. Verifíquelos en la versión actual del plugin antes de confiar en ellos en documentación formal de seguridad.

Autenticación y autorización

  • Las páginas de administración y los controladores POST comprueban la capacidad de gestión del plugin (manage_as24_imports) antes de procesar cualquier cambio de estado.
  • Los endpoints AJAX de administración en el plugin verifican un nonce a través de check_ajax_referer.
  • Los envíos de formularios de administración utilizan check_admin_referer con acciones de nonce específicas del formulario.
  • Las capacidades personalizadas se mapean para el tipo de contenido personalizado as24ci_car con map_meta_cap = true, por lo que los permisos por publicación siguen el mecanismo de meta-capacidades de WordPress.

Superficie de la API REST

  • Las rutas REST públicas de vehículos (/wp-json/as24ci/v1/vehicles y /wp-json/as24ci/v1/vehicles/{id}) solo se registran cuando la opción Enable REST API está activada. Utilizan un permission_callback de __return_true, lo que significa que los datos que devuelven están destinados a ser públicos de solo lectura. Desactive la opción si no desea exponer esta superficie.
  • El endpoint de importación por cron (/wp-json/as24ci/v1/cron-import) registra una ruta pública pero realiza una autenticación basada en token dentro de la función de devolución de llamada (callback). El token se compara con hash_equals (comparación en tiempo constante) y se requiere en cada llamada.
  • El token de cron se puede proporcionar como una cabecera Authorization: Bearer (preferido: mantiene el token fuera de los registros de acceso) o como un parámetro de consulta ?token=.

Token de cron

  • El token de cron se gestiona desde los ajustes de importación del plugin y se almacena en la opción as24ci_cron_token como un hash HMAC-SHA256 unidireccional, por lo que el texto plano no se puede recuperar de un volcado de la base de datos. El valor en texto plano solo está disponible en la interfaz de administración durante una breve ventana de visualización (alrededor de 15 minutos) inmediatamente después de que el token se genera o regenera; después de esa ventana, el administrador solo puede generar un nuevo token, no revelar el anterior.
  • El endpoint rechaza las solicitudes cuando no hay ningún token configurado.

Antiactividad maliciosa en formularios de contacto

  • Cada envío debe llevar el nonce as24ci_contact_form.
  • Un campo trampa (honeypot) oculto website rechaza silenciosamente los envíos automatizados sin producir un error visible.
  • Se aplica un límite de tasa de 5 envíos por IP cada 5 minutos a través de un transient de WordPress. La dirección IP se cifra con un hash mediante wp_salt('auth') antes de su uso y no se almacena con el lead.
  • El campo del mensaje se filtra con wp_kses_post.

Tokens de alertas de búsqueda

  • Cada suscripción tiene un token criptográficamente aleatorio de 64 caracteres utilizado tanto para el enlace de confirmación como para el enlace de cancelación de suscripción.
  • La confirmación solo cambia el estado de una fila de pending a active; los usos posteriores no vuelven a cambiar el estado.

Registrador y enmascaramiento de secretos

  • El registrador (logger) del plugin escribe en un archivo dentro de un subdirectorio dedicado de la carpeta de subidas WordPress (as24ci-logs/).
  • Al crearse, el directorio se protege mediante un archivo .htaccess que deniega todo acceso (solo Apache) y un archivo vacío index.php.
  • Antes de escribir cada línea, el mensaje se sanea para enmascarar fragmentos de token=…, client_secret=… y Authorization: Bearer … (defensa en profundidad).
  • Los registros rotan a los 10 MB y los archivos rotados con más de 7 días de antigüedad se eliminan automáticamente.
  • En servidores que no respetan .htaccess (Nginx, Caddy, IIS), la exposición del directorio de subidas depende de la configuración del servidor web. Los operadores deben asegurarse de que el acceso directo a wp-content/uploads/as24ci-logs/ esté bloqueado en dichos servidores.

Datos al desinstalar

  • Las tablas de analítica y de agentes de búsqueda se eliminan incondicionalmente al desinstalar, por lo que los datos de seguimiento de visitantes y las direcciones de correo electrónico de los suscriptores no persisten después de eliminar el plugin.
  • El ajuste opcional Delete data on uninstall también elimina las publicaciones de vehículos, las publicaciones de leads, las páginas del plugin y los archivos adjuntos importados.

Acciones recomendadas para el operador

Las siguientes recomendaciones combinan el bastionado estándar de WordPress con la configuración específica del plugin.

Credenciales y secretos

  • Trate el secreto de cliente de la API de AutoScout24 y el token de cron como secretos confidenciales. Se almacenan como opciones de WordPress pero están protegidos en reposo por el asistente de secretos centralizado del plugin: el secreto de cliente se cifra con AES-256-GCM autenticado (clave derivada de las sales de WordPress a través de HKDF-SHA256), y el token de cron se almacena como un hash HMAC-SHA256 unidireccional para que el texto plano no se pueda recuperar de un volcado de la base de datos. El bastionado estándar de la base de datos de WordPress sigue aplicándose. La clave de API de Gemini gestionada que utiliza el AI Assistant está configurada por AD Promotion en AS24CI\Ai_Config y no se almacena como una opción de WordPress ni se expone en la interfaz de administración.
  • Restrinja el acceso a la base de datos a los administradores y asegúrese de que wp-config.php no sea de lectura pública.
  • Rote el token de cron si hay alguna razón para sospechar que ha sido expuesto (por ejemplo, a través de registros de acceso que registraron el parámetro de consulta ?token=).

REST y endpoint de cron

  • Desactive Enable REST API si no necesita exponer los endpoints públicos de vehículos.
  • Al utilizar el endpoint de cron integrado, prefiera Authorization: Bearer YOUR_TOKEN en lugar de ?token=… para que el secreto no aparezca en los registros de acceso del servidor web.
  • Utilice HTTPS para cualquier programador externo que llame al endpoint de cron.
  • Prefiera un cron del sistema fiable que active WP-Cron en lugar del comportamiento de pseudo-cron predeterminado en sitios de producción.

Roles y capacidades

  • Otorgue la capacidad manage_as24_imports solo a usuarios de confianza. Por defecto, se añade al rol administrator.
  • Utilice el rol as24ci_editor del plugin (o una configuración personalizada comparable) para el personal que solo necesita gestionar publicaciones de vehículos y no los ajustes del plugin. Consulte Control de acceso y capacidades.

Privacidad y analítica

  • Mantenga la analítica desactivada hasta que tenga una base legal documentada o una integración de consentimiento implementada. Consulte Notas sobre RGPD / DSGVO y Notas sobre revDSG.
  • Mantenga activada la opción Filter data minimization.
  • Establezca la ventana de retención de analítica en el valor más bajo compatible con sus necesidades operativas (mínimo 7 días).

Formularios y gestión de leads

  • Mantenga ocultos los campos opcionales (Teléfono, Mensaje) si no los necesita.
  • Configure el destinatario del correo electrónico de notificación de leads y verifique que sea un buzón de correo controlado.
  • Considere un plugin de SMTP y la alineación de SPF/DKIM/DMARC para reducir el riesgo de que los correos electrónicos de consulta se filtren como spam.
  • Elimine periódicamente los leads que ya no sean necesarios para fines comerciales legítimos.

Característica de AI Assistant

  • El AI Assistant utiliza la configuración gestionada de Google Gemini en ADP Car Market Hub. No se requiere selección de proveedor, selección de modelo ni introducción de clave de API en el backend de WordPress; el aprovisionamiento de IA específico del cliente lo completa AD Promotion después de la instalación. Las instrucciones (prompts) se envían al endpoint gestionado de Gemini a través de HTTPS.
  • Restrinja quién puede configurar el AI Assistant limitando la capacidad manage_as24_imports.
  • Revise el procesamiento de datos aplicable y los términos contractuales para la configuración de IA gestionada antes de habilitar las funciones de IA en producción.

Sistema de archivos y subidas

  • Verifique que el directorio de subidas de WordPress no permita el listado de directorios en su servidor web.
  • En servidores que no sean Apache (Nginx, Caddy, IIS), confirme que wp-content/uploads/as24ci-logs/ no sea accesible públicamente. El plugin escribe un .htaccess para protección en Apache; en otros servidores, los operadores deben añadir una regla equivalente.
  • Mantenga actualizados PHP, WordPress, los temas y otros plugins.

Copias de seguridad y respuesta ante incidentes

  • Incluya la base de datos de WordPress en las copias de seguridad periódicas; esto captura las publicaciones de vehículos, los leads, la analítica y los datos de alertas de búsqueda.
  • Pruebe la restauración de copias de seguridad periódicamente.
  • Documente un plan de respuesta ante incidentes, que incluya cómo desactivar el endpoint de cron (borrar el token de cron) y revocar el secreto de cliente de la API. Para desactivar las funciones de IA, desactive el AI Assistant desde la pestaña de administración AI Assistant; la clave gestionada de Gemini es propiedad de AD Promotion y es rotada por ellos.

Paso a paso: lista de comprobación de seguridad previa a la producción

  1. Confirme que WordPress, el plugin y todos los demás plugins/temas estén en sus versiones estables actuales.
  2. Confirme que el sitio se sirve a través de HTTPS y que las sesiones de administración están restringidas a HTTPS.
  3. Revise la lista de usuarios y roles de WordPress. Elimine las cuentas no utilizadas.
  4. Confirme que solo los usuarios de confianza tienen la capacidad manage_as24_imports.
  5. Decida si se necesitan las rutas REST públicas. Desactive Enable REST API si no es así.
  6. Si se utiliza el endpoint de cron, genere un token de cron aleatorio largo y llámelo a través de Authorization: Bearer … sobre HTTPS.
  7. Configure el correo electrónico del destinatario del formulario de leads y los ajustes de consentimiento.
  8. Revise los ajustes de analítica (desactivados por defecto; si están activados, configure la retención y la integración de consentimiento).
  9. Verifique que el directorio de registros no sea accesible públicamente en su servidor web.
  10. Realice una copia de seguridad de referencia antes de la puesta en marcha.

Resolución de problemas

  • Los usuarios públicos pueden llamar a los controladores AJAX o POST de administración: compruebe que no esté ejecutando herramientas de depuración que omitan las capacidades; los controladores del plugin verifican tanto la capacidad como el nonce en cada solicitud.
  • El endpoint de cron devuelve 403 Invalid or missing token: verifique que el token de cron esté configurado en la administración del plugin y que el remitente lo proporcione correctamente a través de Authorization: Bearer o ?token=.
  • El endpoint de cron devuelve 403 Cron token not configured: abra los ajustes de importación del plugin y genere / configure el token de cron.
  • Los registros no rotan: confirme que el directorio de subidas tiene permisos de escritura y que WP-Cron se está ejecutando. La rotación se comprueba periódicamente (en la primera llamada y cada 100 llamadas posteriores).
  • Aparecen valores confidenciales en los registros: el registrador enmascara los patrones conocidos. Si una integración personalizada registra secretos adicionales, actualice esa integración para enmascararlos en el origen.

Documentos relacionados