← Tous les articles

2 min de lecture Mis à jour le

Vérification automatisée des attestations Athlé PPS

Purple Rouen · Go · Sécurité

Dans le cadre de l’organisation des premières éditions de la course caritative Purple Rouen, j’ai développé un outil de validation automatique des attestations Parcours Prévention Santé (PPS) pour faciliter les inscriptions et garantir la conformité des participants.

Fonctionnement de l’outil de validation

La validation repose sur une vérification côté serveur du contenu affiché par la page liée au QR code, plutôt que sur une simple lecture du code lui-même. C’est un détail qui compte, on va voir pourquoi.

Contenu du QR code

Le QR code présent sur les attestations Athlé PPS contient un lien vers une page web sécurisée hébergée par la Fédération Française d’Athlétisme (FFA), de la forme suivante :

https://pps.athle.fr/passes/pps_vla[...]pzyq/verify?data=eJxFzE0KwjAQ[...]dJGXraF1xu6nS1T

La page affiche les informations suivantes :

  • Numéro PPS
  • Nom
  • Date de naissance
  • Sexe
  • Valable jusqu’au

L’adresse contient aussi une partie data, un token JWT (JSON Web Token) encodé en base64, qui reprend les mêmes informations que la page web. Le problème, c’est qu’on n’a pas la clé de signature pour vérifier l’authenticité de ce token : mieux vaut ne pas se baser uniquement dessus, il peut devenir un vecteur d’attaque.

Récupération des données

Il faut donc faire une requête HTTP à l’URL du QR code pour récupérer les données affichées sur la page, celles qui sont réellement vérifiées par la FFA.

L’outil remplace la requête manuelle de l’utilisateur par une requête automatisée. J’ai utilisé la bibliothèque Golang net/http pour faire une requête GET à l’URL du QR code, puis goquery pour parser le HTML de la page et en extraire les informations nécessaires.

// extract data from the definition list (dl > div > dt/dd)
doc.Find("dl > div").Each(func(i int, s *goquery.Selection) {
    title := s.Find("dt").Text()
    value := s.Find("dd").Text()

    switch strings.TrimSpace(title) {
    case "Numéro PPS":
    case "Nom":
    case "Date de naissance":
    case "Sexe":
    case "Valable jusqu'au":
    }
})

Résultats obtenus

Grâce à cet outil, les dossiers des coureurs sont validés de manière instantanée à l’inscription, sans passer par une étape de vérification différée ni de ressaisie manuelle. Ça a aussi réduit pas mal le temps de traitement des inscriptions côté organisateurs, puisque les données du coureur se pré-remplissent directement à partir du QR code.

Conclusion

L’outil a été utilisé pour les deux éditions de la course (2025 et 2026), sur l’ensemble des inscriptions passées par ce circuit de vérification.