Documentation · Documentation technique
Sécurité et capacités
Ce document décrit le modèle de sécurité du plugin ADP Car Market Hub : quelles capacités et rôles WordPress il introduit, comment ses surfaces d'administration et AJAX sont protégées, et les principes qu'il suit pour le traitement des entrées et les requêtes externes.
Quand utiliser ce document
Lisez ce document si vous devez :
- Décider quel rôle WordPress attribuer à un concessionnaire ou à un éditeur de contenu.
- Auditer qui peut voir, modifier, importer ou changer les réglages.
- Ajouter un rôle personnalisé qui doit pouvoir gérer les annonces de véhicules sans être un administrateur complet.
- Vérifier la posture de sécurité des surfaces HTTP et AJAX du plugin.
Pour plus de détails sur les capacités et les nonces par point de terminaison, consultez REST API Endpoints et AJAX Actions.
Aperçu
Le plugin superpose deux systèmes de capacités indépendants :
- Capacités CPT personnalisées pour les publications
as24ci_car(capacités granulaires de lecture/modification/publication/suppression). - Une capacité de gestion à l'échelle du plugin (
manage_as24_imports) qui filtre les pages d'administration de l'importateur, les déclencheurs d'importation/file d'attente, la purge des analyses, le flux de travail des leads et l'administration de l'Assistant IA.
Un rôle dédié, as24ci_editor (« AS24 Editor »), est créé lors de l'activation. Il reçoit toutes les capacités CPT mais pas manage_as24_imports, ce qui lui permet de gérer les véhicules sans toucher aux réglages de l'importateur.
Référence des capacités
Capacité de gestion du plugin
| Capacité | Objectif |
|---|---|
manage_as24_imports | Requise pour les onglets d'administration de l'importateur, les déclencheurs d'importation/file d'attente, l'assistant par lot, les mises à jour du flux de travail des leads, la purge des analyses, l'administration de l'Assistant IA et l'onglet de support. Attribuée au rôle administrator lors de l'activation. |
Capacités des types de publication personnalisés (as24ci_car)
Le plugin mappe les capacités méta et primitives suivantes :
- Capacités méta singulières :
read_as24ci_car,edit_as24ci_car,delete_as24ci_car. - Capacités primitives plurielles :
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.
Le rôle administrator et le rôle as24ci_editor reçoivent tous deux l'ensemble des capacités ci-dessus lors de l'activation. Le rôle standard WordPress editor ne reçoit pas ces capacités par conception.
Rôles créés par le plugin
as24ci_editor— créé lors de l'activation avec le libellé AS24 Editor. Commence avec la capacitéreadpuis reçoit toutes les capacités CPTas24ci_car. Ne reçoit pasmanage_as24_imports.administrator— reçoit toutes les capacités CPTas24ci_caretmanage_as24_imports. Le rôle lui-même n'est pas créé par le plugin (il fait partie de WordPress).
L'option as24ci_caps_version enregistre la version du schéma de capacités, permettant aux futures mises à niveau du plugin d'ajouter de nouvelles capacités aux rôles existants sans réactivation manuelle.
Modèle de sécurité Admin et AJAX
Chaque gestionnaire AJAX d'administration dans le plugin suit la même structure :
- Vérifier la capacité via
current_user_can( CAP_MANAGE ). En cas d'échec, répondre avec HTTP403et quitter. - Vérifier le nonce via
check_ajax_referer( <action>, 'nonce' ). - Assainir les entrées (
absint,sanitize_key,sanitize_text_field, etc.). - Effectuer le travail.
- Retourner
wp_send_json_success()ouwp_send_json_error().
Pour les nonces et les exigences de capacité par action, consultez AJAX Actions.
Sécurité REST et webhook
- Les points de terminaison publics optionnels pour les véhicules (
GET /as24ci/v1/vehicles[*]) ne sont enregistrés que lorsque l'optionas24ci_rest_api_enabledest égale à'1'. - Le point de terminaison d'importation cron (
GET /as24ci/v1/cron-import) nécessite un jeton stocké dansas24ci_cron_token. La comparaison des jetons utilisehash_equals()pour atténuer les attaques temporelles. Préférez l'en-têteAuthorization: Bearer <token>à l'alternative de chaîne de requête afin que le jeton ne soit pas écrit dans les journaux d'accès. - Les points de terminaison des favoris et des analyses sont publics par conception afin que les visiteurs anonymes puissent les utiliser. Les deux appliquent une validation des entrées et des contraintes de type limitation de débit (les favoris sont limités à 50 identifiants par appel ; les événements d'analyse doivent utiliser les noms d'événements autorisés).
- Les webhooks sortants signent les charges utiles avec HMAC-SHA256 dans l'en-tête
X-AS24CI-Signaturelorsqu'un secret partagé est configuré. Voir Webhooks.
Traitement des entrées et échappement
- Les entrées de formulaire sont assainies via des assistants dédiés (
sanitize_email,sanitize_text_field,sanitize_url,wp_kses_postpour les corps de message,absintpour les identifiants). - La sortie dans les modèles d'administration utilise
esc_html(),esc_attr(),esc_url()etwp_kses_post()selon les besoins. - L'accès à la base de données utilise
$wpdb->prepare()pour les requêtes paramétrées ; le SQL brut est limité aux opérations de schéma et aux ignorances documentées dephpcsdans le code source.
Instructions étape par étape
Accorder l'administration de l'importateur à un utilisateur non-administrateur
- Dans WordPress, modifiez le profil de l'utilisateur.
- Ajoutez un rôle personnalisé (ou étendez l'utilisateur) avec la capacité
manage_as24_imports. - Enregistrez. L'utilisateur peut désormais accéder aux pages d'administration de l'importateur, déclencher des importations et gérer les leads.
Autoriser la création de véhicules sans accès à l'importateur
- Attribuez l'utilisateur au rôle
as24ci_editorcréé par le plugin. - L'utilisateur peut lire, modifier, publier et supprimer des publications
as24ci_carmais ne peut pas accéder à l'administration de l'importateur ni modifier les réglages du plugin.
Notes opérationnelles
manage_as24_importsest une capacité primitive sur le rôleadministrator. La supprimer des administrateurs (par exemple avec un plugin de gestion d'utilisateurs personnalisé) bloquera l'accès de tous les administrateurs aux écrans d'administration de l'importateur et des leads.- Les attributions de capacités sont écrites lors de l'activation. Si un utilisateur supprime une capacité après l'activation, elle n'est pas restaurée automatiquement. Les mises à niveau du plugin qui introduisent une nouvelle capacité réexécutent l'attribution en fonction de l'option
as24ci_caps_version. - Le plugin ne bloque pas les flux de connexion ou de mot de passe standard de WordPress. Utilisez une politique de mot de passe forte et envisagez l'authentification à deux facteurs pour les comptes qui détiennent
manage_as24_imports. - Les configurations sensibles (identifiants clients API, secrets de webhook, jeton cron) sont stockées dans
wp_options. Sur les installations migrées vers la version de données 5, les secrets réversibles (as24ci_client_secret,as24ci_hub_api_key,as24ci_webhook_secret) sont stockés chiffrés en AES-256-GCM viaAS24CI\Secrets, et le jeton cron est stocké sous forme de hachage HMAC à clé. Les sauvegardes de base de données doivent toujours être traitées comme contenant des secrets. La clé API Gemini gérée utilisée par l'assistant IA est fournie de serveur à serveur par la plateforme API et conservée chiffrée parAS24CI\Ai_Credential_Manager; elle n'est pas stockée sous forme d'option WordPress en texte clair ni exposée dans l'interface d'administration. - Le formulaire de contact assainit les entrées et utilise un pot de miel (honeypot) dans certains flux, mais le plugin n'intègre pas de CAPTCHA. Associez-le à un plugin de sécurité ou anti-spam si votre site est ciblé.
Dépannage
Permission denied.lors du déclenchement d'un import — l'utilisateur n'a pas la capacitémanage_as24_imports. Ajoutez la capacité au rôle de l'utilisateur.- Les utilisateurs
as24ci_editorne peuvent pas modifier les publications de véhicules — vérifiez que le rôle a conservé ses capacités CPT (certains gestionnaires de rôles d'utilisateurs suppriment les capacités lors du changement de libellés). Réactivez le plugin pour réappliquer la carte des capacités, ou exécutez les commandes WP-CLI correspondantes. - Le point de terminaison d'importation cron renvoie toujours
403— aucun jeton n'est configuré ou la valeur fournie est différente. Générez un nouveau jeton à partir de l'onglet d'administration Import & Limits. - Le point de terminaison REST
/vehiclesrenvoie404— l'API REST publique est désactivée. Définissezas24ci_rest_api_enabledsur'1'. - Les signatures de webhook ne correspondent pas chez le destinataire — reconsidérer le calcul chez le destinataire en utilisant le corps brut et non modifié de la requête et le même secret partagé. Voir Webhooks.