Documentation · Confidentialité, sécurité et conformité
Recommandations de sécurité
Ce document rassemble des recommandations de sécurité pratiques pour les sites exécutant l'extension ADP Car Market Hub. Il se concentre sur le durcissement opérationnel, les protections intégrées de l'extension et les contrôles que les exploitants de sites doivent configurer en plus du durcissement standard de WordPress.
Ce document ne remplace pas un audit de sécurité complet et ne garantit pas que le site est exempt de vulnérabilités. Les exploitants de sites doivent examiner leur configuration d'hébergement, la configuration de WordPress et les intégrations tierces avec un spécialiste de la sécurité qualifié, le cas échéant.
Quand utiliser ce document
Utilisez ce document lorsque vous devez :
- Préparer un site qui utilise l'extension pour une utilisation en production.
- Examiner les contrôles de sécurité intégrés de l'extension.
- Planifier des mesures de sécurité opérationnelle (identifiants, cron, journaux, sauvegardes).
- Répondre à un examen ou à un questionnaire de sécurité interne.
Aperçu
L'extension s'appuie sur les primitives de sécurité standard de WordPress :
- Les capacités WordPress (capacité personnalisée de l'extension
manage_as24_importspour les actions de gestion ; capacités par CPT pour les publications de véhicules). - Les nonces WordPress sur chaque formulaire d'administration, action AJAX et gestionnaire POST d'administration.
- Les fonctions d'aide standard de nettoyage et d'échappement de WordPress (
sanitize_*,wp_kses_post,esc_*,wp_unslash). - Les transients WordPress pour les états à courte durée de vie (limites de débit, verrous d'exécution).
- Le TLS existant du site, la protection de connexion, les permissions de fichiers et la sécurité de la base de données.
L'extension ajoute plusieurs protections spécifiques aux fonctionnalités en plus de ces primitives, répertoriées dans la section suivante.
Protections intégrées
Les comportements ci-dessous reflètent ce que le code de l'extension implémente aujourd'hui. Vérifiez-les dans la version actuelle de l'extension avant de vous y fier dans une documentation de sécurité formelle.
Authentification et autorisation
- Les pages d'administration et les gestionnaires POST vérifient la capacité de gestion de l'extension (
manage_as24_imports) avant de traiter tout changement d'état. - Les points de terminaison AJAX d'administration de l'extension vérifient un nonce via
check_ajax_referer. - Les soumissions de formulaires d'administration utilisent
check_admin_refereravec des actions de nonce spécifiques au formulaire. - Les capacités personnalisées sont mappées pour le type de publication
as24ci_caravecmap_meta_cap = true, de sorte que les permissions par publication suivent le mécanisme de méta-capacité de WordPress.
Surface de l'API REST
- Les routes REST publiques des véhicules (
/wp-json/as24ci/v1/vehicleset/wp-json/as24ci/v1/vehicles/{id}) ne sont enregistrées que lorsque l'option Activer l'API REST est activée. Elles utilisent unpermission_callbackde__return_true, ce qui signifie que les données qu'elles renvoient sont destinées à être publiques en lecture seule. Désactivez l'option si vous ne souhaitez pas exposer cette surface. - Le point de terminaison d'importation cron (
/wp-json/as24ci/v1/cron-import) enregistre une route publique mais effectue une authentification basée sur un jeton à l'intérieur du rappel. Le jeton est comparé àhash_equals(comparaison en temps constant) et est requis à chaque appel. - Le jeton cron peut être fourni soit sous forme d'en-tête
Authorization: Bearer(préféré — maintient le jeton hors des journaux d'accès), soit sous forme de paramètre de requête?token=.
Jeton cron
- Le jeton cron est géré depuis les réglages d'importation de l'extension et est stocké dans l'option
as24ci_cron_tokensous forme de hachage HMAC-SHA256 unidirectionnel, de sorte que le texte en clair ne peut pas être récupéré à partir d'un export de base de données. La valeur en clair n'est disponible dans l'interface d'administration que pendant une courte fenêtre d'affichage (environ 15 minutes) immédiatement après la génération ou la régénération du jeton ; après cette fenêtre, l'administrateur peut uniquement régénérer un nouveau jeton, pas révéler le précédent. - Le point de terminaison refuse les requêtes lorsqu'aucun jeton n'est configuré.
Anti-abus du formulaire de contact
- Chaque soumission doit porter le nonce
as24ci_contact_form. - Un champ piège (honeypot) masqué
websiterejette silencieusement les soumissions automatisées sans produire d'erreur visible. - Une limite de débit de 5 soumissions par IP toutes les 5 minutes est appliquée via un transient WordPress. L'adresse IP est hachée avec
wp_salt('auth')avant utilisation et n'est pas stockée avec le lead. - Le champ du message est filtré avec
wp_kses_post.
Jetons d'alerte de recherche
- Chaque abonnement dispose d'un jeton de 64 caractères aléatoire sur le plan cryptographique, utilisé à la fois pour le lien de confirmation et le lien de désinscription.
- La confirmation fait simplement passer une ligne de
pendingàactive; les utilisations ultérieures ne modifient plus l'état.
Journaliseur et masquage des secrets
- Le journaliseur de l'extension écrit dans un fichier situé dans un sous-répertoire dédié du dossier d'importation WordPress (
as24ci-logs/). - Lors de sa création, le répertoire est protégé par un fichier
.htaccessqui refuse tout accès (Apache uniquement) et un fichierindex.phpvide. - Avant l'écriture de chaque ligne, le message est nettoyé pour masquer les fragments de
token=…,client_secret=…etAuthorization: Bearer …(défense en profondeur). - Les journaux effectuent une rotation à 10 Mo et les fichiers ayant fait l'objet d'une rotation datant de plus de 7 jours sont supprimés automatiquement.
- Sur les serveurs qui ne respectent pas
.htaccess(Nginx, Caddy, IIS), l'exposition du répertoire d'importation dépend de la configuration du serveur web. Les exploitants doivent s'assurer que l'accès direct àwp-content/uploads/as24ci-logs/est bloqué sur ces serveurs.
Données lors de la désinstallation
- Les tables d'analyse et d'agent de recherche sont supprimées sans condition lors de la désinstallation, de sorte que les données de suivi des visiteurs et les adresses e-mail des abonnés ne persistent pas après la suppression de l'extension.
- Le réglage facultatif Supprimer les données lors de la désinstallation supprime également les publications de véhicules, les publications de leads, les pages de l'extension et les pièces jointes importées.
Actions recommandées pour l'exploitant
Les recommandations ci-dessous combinent le durcissement standard de WordPress avec une configuration spécifique à l'extension.
Identifiants et secrets
- Traitez le secret client de l'API AutoScout24 et le jeton cron comme des secrets sensibles. Ils sont stockés en tant qu'options WordPress mais sont protégés au repos par l'assistant de secrets centralisé de l'extension : le secret client est chiffré avec AES-256-GCM authentifié (clé dérivée des sels WordPress via HKDF-SHA256), et le jeton cron est stocké sous forme de hachage HMAC-SHA256 unidirectionnel afin que le texte en clair ne puisse pas être récupéré à partir d'un export de base de données. Le durcissement standard de la base de données WordPress s'applique toujours.
La clé API Gemini gérée utilisée par l'assistant IA est configurée par AD Promotion dans
AS24CI\Ai_Configet n'est pas stockée en tant qu'option WordPress ni exposée dans l'interface d'administration. - Limitez l'accès à la base de données aux administrateurs et assurez-vous que
wp-config.phpn'est pas lisible par tout le monde. - Renouvelez le jeton cron s'il y a des raisons de soupçonner qu'il a été exposé (par exemple via des journaux d'accès qui ont enregistré le paramètre de requête
?token=).
REST et point de terminaison cron
- Désactivez Activer l'API REST si vous n'avez pas besoin d'exposer les points de terminaison publics des véhicules.
- Lorsque vous utilisez le point de terminaison cron intégré, préférez
Authorization: Bearer YOUR_TOKENà?token=…afin que le secret n'apparaisse pas dans les journaux d'accès du serveur web. - Utilisez HTTPS pour tout planificateur externe qui appelle le point de terminaison cron.
- Préférez un cron système fiable déclenchant WP-Cron au comportement pseudo-cron par défaut sur les sites de production.
Rôles et capacités
- Accordez la capacité
manage_as24_importsuniquement aux utilisateurs de confiance. Par défaut, elle est ajoutée au rôleadministrator. - Utilisez le rôle
as24ci_editorde l'extension (ou une configuration personnalisée comparable) pour le personnel qui a uniquement besoin de gérer les publications de véhicules et non les réglages de l'extension. Voir Contrôle d'accès et capacités.
Confidentialité et analyses
- Laissez les analyses désactivées tant que vous n'avez pas de base légale documentée ou d'intégration de consentement en place. Voir Notes sur le RGPD / DSGVO et Notes sur la LPD.
- Laissez l'option Minimisation des données de filtrage activée.
- Définissez la fenêtre de conservation des analyses sur la valeur la plus basse compatible avec vos besoins opérationnels (minimum 7 jours).
Formulaires et gestion des leads
- Laissez les champs facultatifs (Téléphone, Message) masqués si vous n'en avez pas besoin.
- Configurez le destinataire de l'e-mail de notification de lead et vérifiez qu'il s'agit d'une boîte aux lettres contrôlée.
- Envisagez une extension SMTP et un alignement SPF/DKIM/DMARC pour réduire le risque que les e-mails de demande soient filtrés comme spam.
- Supprimez périodiquement les leads qui ne sont plus nécessaires à des fins commerciales légitimes.
Fonctionnalité d'assistant IA
- L'assistant IA utilise la configuration Google Gemini gérée dans ADP Car Market Hub. Aucune sélection de fournisseur, sélection de modèle ou saisie de clé API n'est requise dans le back-end WordPress ; le provisionnement de l'IA spécifique au client est effectué par AD Promotion après l'installation. Les requêtes sont envoyées au point de terminaison Gemini géré via HTTPS.
- Limitez les personnes autorisées à configurer l'assistant IA en restreignant la capacité
manage_as24_imports. - Examinez le traitement des données applicable et les conditions contractuelles pour la configuration de l'IA gérée avant d'activer les fonctionnalités d'IA en production.
Système de fichiers et téléversements
- Vérifiez que le répertoire d'importation WordPress ne permet pas le listage de répertoires sur votre serveur web.
- Sur les serveurs non-Apache (Nginx, Caddy, IIS), confirmez que
wp-content/uploads/as24ci-logs/n'est pas accessible publiquement. L'extension écrit un.htaccesspour la protection sur Apache ; sur les autres serveurs, les exploitants doivent ajouter une règle équivalente. - Maintenez PHP, WordPress, les thèmes et les autres extensions à jour.
Sauvegardes et réponse aux incidents
- Incluez la base de données WordPress dans les sauvegardes régulières ; cela capture les publications de véhicules, les leads, les analyses et les données d'alerte de recherche.
- Testez périodiquement la restauration des sauvegardes.
- Documentez un plan de réponse aux incidents, y compris la manière de désactiver le point de terminaison cron (effacer le jeton cron) et de révoquer le secret client de l'API. Pour désactiver les fonctionnalités d'IA, désactivez l'assistant IA depuis l'onglet d'administration Assistant IA ; la clé Gemini gérée appartient à AD Promotion et est renouvelée par celle-ci.
Étape par étape : liste de contrôle de sécurité avant la mise en production
- Confirmez que WordPress, l'extension et toutes les autres extensions/thèmes sont dans leurs versions stables actuelles.
- Confirmez que le site est desservi via HTTPS et que les sessions d'administration sont limitées à HTTPS.
- Examinez la liste des utilisateurs et des rôles de WordPress. Supprimez les comptes inutilisés.
- Confirmez que seuls les utilisateurs de confiance détiennent la capacité
manage_as24_imports. - Décidez si les routes REST publiques sont nécessaires. Désactivez Activer l'API REST si ce n'est pas le cas.
- Si le point de terminaison cron est utilisé, générez un long jeton cron aléatoire et appelez-le via
Authorization: Bearer …sur HTTPS. - Configurez l'e-mail du destinataire du formulaire de lead et les réglages de consentement.
- Examinez les réglages d'analyse (désactivés par défaut ; si activés, définissez la conservation et l'intégration du consentement).
- Vérifiez que le répertoire des journaux n'est pas accessible publiquement sur votre serveur web.
- Effectuez une sauvegarde de référence avant la mise en production.
Dépannage
- Les utilisateurs publics peuvent appeler l'AJAX d'administration ou les gestionnaires POST d'administration — vérifiez que vous n'exécutez pas de modules d'aide au débogage qui contournent les capacités ; les gestionnaires de l'extension vérifient à la fois la capacité et le nonce à chaque requête.
- Le point de terminaison cron renvoie
403 Invalid or missing token— vérifiez que le jeton cron est configuré dans l'administration de l'extension et que l'appelant le fournit correctement viaAuthorization: Bearerou?token=. - Le point de terminaison cron renvoie
403 Cron token not configured— ouvrez les réglages d'importation de l'extension et générez / définissez le jeton cron. - Les journaux ne tournent pas — confirmez que le répertoire d'importation est accessible en écriture et que WP-Cron est en cours d'exécution. La rotation est vérifiée périodiquement (au premier appel et tous les 100 appels suivants).
- Des valeurs sensibles apparaissent dans les journaux — le journaliseur masque les modèles connus. Si une intégration personnalisée enregistre des secrets supplémentaires, mettez à jour cette intégration pour les masquer à la source.