Regex jeton Slack (xoxb-, xoxp-, xapp-…)
Un jeton Slack commence par un préfixe qui donne son type (xoxb- bot, xoxp- utilisateur, xapp- niveau application, xoxe.xapp- application avec rotation) et se compose de sections séparées par « - » : la documentation précise que la dernière section est le secret, de 32 caractères (6 ou 10 pour les jetons d'utilisateur antérieurs à août 2016). Son exemple, xoxp-111-222-333-d6bc768406e5c2e6958cfc399b438004, a des sections de 3 chiffres. Gitleaks et trufflehog fixent au contraire des sections de 10 à 13 chiffres : trufflehog rejette le jeton de la documentation. Gitleaks n'examine que les bots, detect-secrets accepte le préfixe en majuscules, secretlint accepte un jeton à deux sections et un nombre illimité de sections. Voici un motif ancré qui suit la structure documentée (préfixe, 2 à 3 sections, secret d'au moins 6 caractères), comparé à ces outils.
/^(?:xoxb|xoxp|xapp|xoxe\.xapp)(?:-[0-9A-Za-z]{1,40}){2,3}-[0-9A-Za-z]{6,64}$/Comparatif des patterns existants
Implémentation
const re = new RegExp("^(?:xoxb|xoxp|xapp|xoxe\\.xapp)(?:-[0-9A-Za-z]{1,40}){2,3}-[0-9A-Za-z]{6,64}$", "");
re.test(input);Limites
- Valide seulement la FORME : ne prouve pas que le jeton existe, est actif ni de quel espace de travail il vient. Un jeton bien formé mais inventé passe ce motif.
- La documentation Slack ne donne que les préfixes, le séparateur « - » et la longueur du secret des jetons d'utilisateur (32 caractères, parfois 6 ou 10) : le nombre de sections (3 à 4 au total hors préfixe) et l'alphabet alphanumérique viennent d'exemples et des détecteurs. Le motif accepte un secret d'au moins 6 caractères, plus large que le 32 documenté.
- Le préfixe xwfp- (jetons de workflow) est documenté mais non couvert, faute de structure publiée ; les jetons de configuration, de rotation (xoxe.xoxp-…) et les URL de webhook (hooks.slack.com/services/T…/B…/…) sont d'autres formats.
- Pour détecter des jetons dans du texte, retirez les ancres et entourez de \b. Ne collez jamais un vrai jeton dans un outil en ligne : utilisez des chaînes factices pour les tests.