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.