Regex Slack token (xoxb-, xoxp-, xapp-…)
A Slack token starts with a prefix giving its type (xoxb- bot, xoxp- user, xapp- app-level, xoxe.xapp- rotating app-level) and consists of sections separated by '-': the documentation says the last section is the secret, 32 characters long (6 or 10 for user tokens created before August 2016). Its example, xoxp-111-222-333-d6bc768406e5c2e6958cfc399b438004, has 3-digit sections. Gitleaks and trufflehog instead require 10 to 13 digit sections: trufflehog rejects the documented token. Gitleaks only looks at bots, detect-secrets accepts the prefix in uppercase, secretlint accepts a two-section token and an unlimited number of sections. Here's an anchored pattern following the documented structure (prefix, 2 to 3 sections, secret of at least 6 characters), compared against those tools.
/^(?:xoxb|xoxp|xapp|xoxe\.xapp)(?:-[0-9A-Za-z]{1,40}){2,3}-[0-9A-Za-z]{6,64}$/Comparison of existing patterns
Implementation
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);Limits
- 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.