Regex clé d'API Stripe (sk_live_, pk_test_…)
Une clé d'API Stripe s'écrit type_mode_corps : le type est sk (secrète), rk (restreinte) ou pk (publiable), le mode est test (environnement de test) ou live (production), et le corps est alphanumérique. La documentation de Stripe ne fixe que ces préfixes (sk_live_, rk_test_, pk_live_…), pas la longueur du corps ; les bornes viennent des détecteurs, qui varient : exactement 24 caractères chez detect-secrets, 20 à 247 chez trufflehog, 10 à 99 chez gitleaks. Les trois outils relus ne regardent que les clés secrètes ou restreintes, et deux ignorent les clés de test. Voici un motif ancré qui couvre les trois types et les deux modes, comparé à ces outils.
/^(?:sk|rk|pk)_(?:test|live)_[A-Za-z0-9]{24,247}$/passe 24/24 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| gitleaks (stripe-access-token) — accepte le mode « prod » (absent de la documentation); ignore les clés publiables pk_ ; borne le corps à 99, donc refuse un corps de 107 caractères | \b((?:sk|rk)_(?:test|live|prod)_[a-zA-Z0-9]{10,99})(?:[\x60'"\s;]|\\[nr]|$) | 18 / 24 | sûr |
| detect-secrets (Yelp, StripeDetector) — uniquement sk_live_ et rk_live_ : les clés de test et pk_ sont rejetées ; corps de 24 caractères exactement, sans ancre : un corps plus long passe | (?:r|s)k_live_[0-9a-zA-Z]{24} | 16 / 24 | sûr |
| trufflehog (stripe) — uniquement live ; sans ancre : un corps de 248 caractères passe (le motif en prend 247), préfixe collé à du texte aussi | [rs]k_live_[a-zA-Z0-9]{20,247} | 14 / 24 | sûr |
Implémentation
const re = new RegExp("^(?:sk|rk|pk)_(?:test|live)_[A-Za-z0-9]{24,247}$", "");
re.test(input);Limites
- Valide seulement la FORME : ne prouve pas que la clé existe ni qu'elle est active (seule l'API de Stripe peut le dire). Une clé sk_live_ valide en forme mais inventée passe ce motif.
- La documentation de Stripe ne fixe ni la longueur ni l'alphabet du corps : la borne de 24 à 247 caractères alphanumériques est un choix inspiré de detect-secrets et de trufflehog, pas une règle publiée. Si Stripe change le format, adaptez-la.
- Les clés d'organisation (sk_org_…) et les clés gérées émises par des plateformes d'hébergement sont mentionnées par la documentation mais ne sont pas couvertes. Les secrets de webhook (whsec_…) et les identifiants d'objets (pi_…, cus_…) sont d'autres formats.
- Une clé pk_ est publiable (côté client) ; sk_ et rk_ sont des secrets : ne les mettez jamais dans le code ni dans un outil en ligne, et n'utilisez que des chaînes factices pour les tests.