TAXII : paginer sans perdre les ajouts du flux
Distinguez added_after, date_added et modified, puis testez les curseurs, les versions et la reprise après panne d’un client TAXII 2.1.

Un client TAXII peut répondre « synchronisation réussie » tout en oubliant des objets. Le défaut apparaît souvent quand il utilise modified d’un objet STIX comme valeur de added_after, ou lorsqu’il avance son checkpoint avant d’avoir enregistré la dernière page.
Pour vérifier votre intégration, séparez deux problèmes : parcourir toutes les pages d’une requête et savoir d’où reprendre après une panne. Un curseur de pagination résout le premier. Un checkpoint durable et un stockage capable de rejouer les mêmes données résolvent le second.
La date du renseignement n’est pas la date du transport
Dans TAXII 2.1, added_after sélectionne les objets ajoutés après une date donnée à la collection. Cette date est indépendante des horodatages internes de STIX. Le manifeste expose date_added ; les en-têtes X-TAXII-Date-Added-First et X-TAXII-Date-Added-Last décrivent les bornes de la réponse. Ces règles figurent dans la spécification TAXII 2.1.
Considérez cet exemple fictif, où A et B abrègent des identifiants :
| Objet | Dernière modification STIX | Ajout à la collection |
|---|---|---|
| A | 1er septembre | 12 octobre, 08:00 UTC |
| B | 11 octobre | 12 octobre, 08:01 UTC |
Un import démarré après le 11 octobre doit pouvoir récupérer A malgré son contenu ancien. Si votre filtre local rejette automatiquement les objets dont modified précède le dernier passage, A disparaîtra. C’est le cas à inclure en priorité dans un test de synchronisation.
Stockez les horodatages avec leur précision originale. Convertir une date en secondes entières pour simplifier la base peut déplacer une frontière de reprise. Conservez aussi une représentation lisible, mais ne l’utilisez pas comme clé technique.
Lire toutes les pages, puis confirmer le passage
Lorsque more vaut true, une réponse TAXII 2.1 peut fournir next. Le client transmet ce jeton dans la requête suivante avec les options d’origine. Sans jeton, la spécification prévoit un repli : utiliser X-TAXII-Date-Added-Last comme added_after, en gardant les autres filtres. Le document de tests d’interopérabilité OASIS décrit ces deux parcours.
Traitez next comme une valeur opaque. Ne le décodez pas pour construire un numéro de page et ne le réutilisez pas pour une autre collection. Le triplet racine API, collection, filtres doit rester associé au passage courant.
Une recette opérationnelle peut suivre ces étapes :
- Charger le dernier checkpoint confirmé et les filtres de la tâche.
- Demander la première page et vérifier son statut ainsi que sa structure.
- Enregistrer les objets et les éventuels rejets de validation de façon durable.
- Continuer selon
moreet les informations de continuation reçues. - Confirmer le nouveau checkpoint lorsque tout le passage a été traité.
Cette liste décrit un contrat de traitement, pas une implémentation transactionnelle imposée. Un stockage par page convient si le rejeu est sans effet supplémentaire. L’enjeu est de pouvoir expliquer ce qui se passe entre une écriture réussie et une panne du processus.
Tester les frontières qui font perdre des objets
Construisez une collection de test dont plusieurs objets partagent exactement le même instant d’ajout. Imposez une petite taille de page pour couper ce groupe. Vérifiez que la suite des réponses restitue tous les identifiants attendus.
Ce test est indispensable avec une continuation temporelle : une condition strictement « après T » ne récupère pas, par elle-même, les autres éléments datés de T. Si le serveur ne permet pas de parcourir cette frontière correctement, refaire aveuglément la même requête ne règle rien. Documentez l’écart et faites préciser le comportement par le fournisseur avant de déclarer l’import complet.
Testez aussi une page vide après une réponse annonçant encore des éléments. Une collection peut évoluer pendant la lecture. Le client doit enregistrer ce résultat et terminer ou signaler l’anomalie selon le contrat observé, sans entrer dans une boucle infinie. Ajoutez une protection contre un jeton répété sans progression.
Une fenêtre de recouvrement entre deux passages peut aider à rejouer des éléments de frontière. Elle augmente aussi le nombre de doublons à absorber. Elle ne répare ni une rétention expirée, ni une pagination défectueuse qui rend certains éléments inaccessibles.
Choisir explicitement les versions à conserver
Le filtre TAXII match[version] peut demander first, last ou all ; last est le comportement par défaut, selon la section sur les filtres de versions. Pour les objets STIX versionnés, une valeur précise correspond à leur horodatage modified. Le même identifiant peut donc désigner plusieurs états du renseignement.
Décidez si votre besoin est une vue actuelle ou un historique. Pour une vue actuelle, vous pouvez conserver le dernier état tout en archivant la provenance de chaque import. Pour un historique, demandez les versions pertinentes et vérifiez que le serveur les conserve effectivement. Aucun choix de paramètre ne recrée une version que le fournisseur a supprimée.
Une déduplication uniquement sur l’identifiant peut jeter une révision utile. Pour les objets STIX qui portent modified, testez une clé incluant ce champ. Pour les types sans ce champ, définissez une règle adaptée au type au lieu d’ajouter une date inventée.
Simuler la panne avant d’ouvrir le flux en production
Interrompez volontairement le client après l’enregistrement d’une page mais avant la confirmation du checkpoint. Au redémarrage, il doit relire ce qui est nécessaire sans créer une nouvelle alerte pour chaque objet déjà connu.
Refaites l’exercice avec un objet invalide. Deux décisions sont défendables : arrêter la fenêtre pour correction, ou isoler durablement l’objet rejeté et poursuivre selon une politique explicite. L’ignorer silencieusement rend le compteur « importés » trompeur. Le journal doit distinguer reçus, enregistrés, déjà présents et rejetés.
Le guide d’intégration continue TAXII vers un SIEM détaille l’environnement du connecteur. Les différences entre Indicator et Observed Data permettent ensuite de vérifier ce que deviennent les objets une fois transportés.
Avant de multiplier vos collections, rejouez ces cas sur une seule : ajout tardif, dates identiques, nouvelle version, panne intermédiaire et rejet de validation. Conservez le résultat attendu avec le connecteur. Vous disposerez alors d’un contrôle concret lors de chaque évolution du pipeline STIX/TAXII, au lieu de vous fier au seul nombre de réponses HTTP réussies.
FAQ
Questions fréquentes
added_after filtre-t-il la date modified des objets STIX ?
Non. Il filtre leur date d’ajout à la collection TAXII. Un objet STIX ancien ajouté récemment peut donc appartenir à une nouvelle fenêtre de synchronisation.
Que faire si more vaut true sans champ next ?
TAXII 2.1 prévoit une continuation avec added_after fixé à X-TAXII-Date-Added-Last, en conservant les autres options. Testez les objets de même date d’ajout avec votre serveur.
Peut-on utiliser l’heure du client comme checkpoint ?
Ce choix risque de sauter des objets. Le checkpoint doit être fondé sur les données du serveur effectivement traitées et validées, avec une stratégie de reprise testée.
Articles associés
Flux de menaces TAXII : construire une intégration SIEM continueConnectez une collection TAXII isMalicious à votre SIEM avec pagination sûre, checkpoints durables, validation, suivi et reprise.
- Flux STIX/TAXII : guide opérationnel pour OpenCTI, MISP et pipelines SIEM
Comment connecter des collections STIX 2.1 et TAXII 2.1 à OpenCTI, MISP ou votre SIEM — quoi interroger, comment gérer la confiance et le vieillissement des indicateurs, et où placer les API d'enrichissement face à l'ingestion de flux.
Plateformes de threat intelligence : architecture, qualité des données et flux à fort signalConcevoir des TIP et des pipelines de renseignement qui passent à l'échelle : normalisation, scoring de confiance, déduplication, diffusion API-first, et comment articuler l'investissement plateforme avec les workflows analystes.
Vérifiez une IP ou un domaine
Voyez ce qu’en dit notre base de renseignement indexée.
Essayer le vérificateur d’IP et de domaines