Documentación · Documentación técnica

Seguridad y capacidades

Este documento describe el modelo de seguridad del plugin ADP Car Market Hub: qué capacidades y roles de WordPress introduce, cómo se protegen sus interfaces de administración y AJAX, y los principios que sigue para el manejo de entradas y solicitudes externas.

Cuándo utilizar este documento

Lea este documento si necesita:

  • Decidir qué rol de WordPress asignar a un concesionario o editor de contenido.
  • Auditar quién puede ver, editar, importar o cambiar los ajustes.
  • Añadir un rol personalizado que deba ser capaz de gestionar los listados de vehículos sin ser un administrador completo.
  • Verificar la postura de seguridad de las interfaces HTTP y AJAX del plugin.

Para obtener detalles sobre capacidades y nonces por endpoint, consulte REST API Endpoints y AJAX Actions.

Descripción general

El plugin superpone dos sistemas de capacidades independientes:

  1. Capacidades de CPT personalizadas para entradas de as24ci_car (capacidades granulares de lectura/edición/publicación/eliminación).
  2. Una capacidad de gestión para todo el plugin (manage_as24_imports) que restringe el acceso a las páginas de administración del importador, los activadores de importación/cola, la purga de analíticas, el flujo de trabajo de leads y la administración del AI Assistant.

Se crea un rol dedicado, as24ci_editor ("AS24 Editor"), al realizar la activación. Este recibe todas las capacidades de CPT pero no manage_as24_imports, lo que le permite mantener los vehículos sin tocar los ajustes del importador.

Referencia de capacidades

Capacidad de gestión del plugin

CapacidadPropósito
manage_as24_importsRequerida para las pestañas de administración del importador, activadores de importación/cola, asistente por lotes, actualizaciones del flujo de trabajo de leads, purga de analíticas, administración del AI Assistant y pestaña de soporte. Se otorga al rol administrator al activarse.

Capacidades de tipos de contenido personalizados (as24ci_car)

El plugin mapea las siguientes capacidades meta y primitivas:

  • Meta capacidades singulares: read_as24ci_car, edit_as24ci_car, delete_as24ci_car.
  • Capacidades primitivas plurales: read_private_as24ci_cars, edit_as24ci_cars, edit_others_as24ci_cars, edit_published_as24ci_cars, publish_as24ci_cars, delete_as24ci_cars, delete_others_as24ci_cars, delete_published_as24ci_cars.

Tanto al rol administrator como al rol as24ci_editor se les otorgan todas las anteriores al activarse. El rol estándar de WordPress editor no recibe estas capacidades por diseño.

Roles creados por el plugin

  • as24ci_editor — creado al activarse con la etiqueta AS24 Editor. Comienza con la capacidad read y luego recibe todas las capacidades de CPT de as24ci_car. No recibe manage_as24_imports.
  • administrator — recibe todas las capacidades de CPT de as24ci_car y manage_as24_imports. El rol en sí no es creado por el plugin (forma parte de WordPress).

La opción as24ci_caps_version registra la versión del esquema de capacidades, lo que permite que futuras actualizaciones del plugin añadan nuevas capacidades a los roles existentes sin necesidad de una reactivación manual.

Patrón de seguridad de administración y AJAX

Cada controlador AJAX de administración en el plugin sigue la misma estructura:

  1. Verificar la capacidad a través de current_user_can( CAP_MANAGE ). En caso de fallo, responder con HTTP 403 y salir.
  2. Verificar el nonce a través de check_ajax_referer( <action>, 'nonce' ).
  3. Sanear las entradas (absint, sanitize_key, sanitize_text_field, etc.).
  4. Realizar el trabajo.
  5. Devolver wp_send_json_success() o wp_send_json_error().

Para conocer los nonces y requisitos de capacidad por acción, consulte AJAX Actions.

Seguridad de REST y webhooks

  • Los endpoints públicos opcionales de vehículos (GET /as24ci/v1/vehicles[*]) solo se registran cuando la opción as24ci_rest_api_enabled es igual a '1'.
  • El endpoint de importación por cron (GET /as24ci/v1/cron-import) requiere un token almacenado en as24ci_cron_token. La comparación del token utiliza hash_equals() para mitigar ataques de temporización. Se prefiere la cabecera Authorization: Bearer <token> frente a la alternativa de cadena de consulta para que el token no se escriba en los registros de acceso.
  • Los endpoints de favoritos y analíticas son públicos por diseño para que los visitantes anónimos puedan utilizarlos. Ambos aplican validación de entrada y restricciones de tipo límite de tasa (los favoritos están limitados a 50 ID por llamada; los eventos de analíticas deben usar los nombres de eventos permitidos).
  • Los webhooks salientes firman las cargas útiles con HMAC-SHA256 en la cabecera X-AS24CI-Signature cuando se configura un secreto compartido. Consulte Webhooks.

Manejo y escape de entradas

  • Las entradas de los formularios se sanean mediante funciones auxiliares dedicadas (sanitize_email, sanitize_text_field, sanitize_url, wp_kses_post para cuerpos de mensajes, absint para ID).
  • La salida en las plantillas de administración utiliza esc_html(), esc_attr(), esc_url() y wp_kses_post() según corresponda.
  • El acceso a la base de datos utiliza $wpdb->prepare() para consultas parametrizadas; el SQL sin procesar se restringe a operaciones de esquema e ignorados documentados de phpcs en el código fuente.

Instrucciones paso a paso

Conceder acceso a la administración del importador a un usuario no administrador

  1. En WordPress, edite el perfil de usuario.
  2. Añada un rol personalizado (o amplíe el usuario) con la capacidad manage_as24_imports.
  3. Guarde los cambios. El usuario ahora puede acceder a las páginas de administración del importador, activar importaciones y gestionar leads.

Permitir la creación de vehículos sin acceso al importador

  1. Asigne al usuario el rol as24ci_editor creado por el plugin.
  2. El usuario podrá leer, editar, publicar y eliminar entradas de as24ci_car pero no podrá acceder a la administración del importador ni cambiar los ajustes del plugin.

Notas operativas

  • manage_as24_imports es una capacidad primitiva en el rol administrator. Eliminarla de los administradores (por ejemplo, con un plugin personalizado de gestión de usuarios) bloqueará el acceso de todos los administradores a las pantallas de administración del importador y de leads.
  • Las asignaciones de capacidades se escriben al realizar la activación. Si un usuario elimina una capacidad después de la activación, esta no se restaura automáticamente. Las actualizaciones del plugin que introducen una nueva capacidad vuelven a ejecutar la asignación basándose en la opción as24ci_caps_version.
  • El plugin no bloquea los flujos estándar de inicio de sesión o contraseña de WordPress. Utilice una política de contraseñas segura y considere la autenticación de doble factor para las cuentas que posean manage_as24_imports.
  • La configuración sensible (credenciales de cliente de la API, secretos de webhooks, el token de cron) se almacena en wp_options. En las instalaciones migradas a la versión de datos 5, los secretos reversibles (as24ci_client_secret, as24ci_hub_api_key, as24ci_webhook_secret) se almacenan encriptados con AES-256-GCM a través de AS24CI\Secrets, y el token de cron se almacena como un hash HMAC con clave. Las copias de seguridad de la base de datos deben seguir tratándose como si contuvieran secretos. La clave de API de Gemini gestionada que utiliza el AI Assistant se entrega de servidor a servidor mediante la API Platform y se mantiene encriptada por AS24CI\Ai_Credential_Manager; no se almacena como una opción de WordPress en texto plano ni se expone en la interfaz de administración.
  • El formulario de contacto sanea las entradas y utiliza un honeypot en algunos flujos, pero el plugin no incluye un CAPTCHA. Combínelo con un plugin de seguridad o antispam si su sitio es blanco de ataques.

Resolución de problemas

  • Permission denied. al activar una importación — el usuario carece de manage_as24_imports. Añada la capacidad al rol del usuario.
  • Los usuarios de as24ci_editor no pueden editar entradas de vehículos — verifique que el rol conserve sus capacidades de CPT (algunos gestores de roles de usuario eliminan capacidades al cambiar las etiquetas). Vuelva a activar el plugin para volver a aplicar el mapa de capacidades, o ejecute los comandos de WP-CLI correspondientes.
  • El endpoint de importación por cron siempre devuelve 403 — no hay ningún token configurado o el valor proporcionado difiere. Genere un nuevo token desde la pestaña de administración Import & Limits.
  • REST /vehicles devuelve 404 — la API REST pública está deshabilitada. Establezca as24ci_rest_api_enabled en '1'.
  • Las firmas de webhook no coinciden en el receptor — vuelva a calcularlas en el receptor utilizando el cuerpo de la solicitud original sin modificar y el mismo secreto compartido. Consulte Webhooks.

Documentos relacionados