Intermédiaire·2 min·4 mai 2026

TRE vs Python : ton regex n'est pas à l'abri des attaques

TRE, la bibliothèque regex qu'utilise Redis, résiste aux attaques qui paralysent le module `re` de Python.
TRE vs Python : ton regex n'est pas à l'abri des attaques

Pourquoi ça compte pour toi

Si tu crées une application web qui accepte du regex utilisateur (formulaires de recherche, filtres, API), tu es vulnérable aux attaques ReDoS : un regex malveillant peut bloquer ton serveur entier. TRE offre une alternative native qui échappe à ce piège. C'est surtout pertinent si tu gères de gros volumes de données ou si la sécurité est critique.

Ce qu'il faut retenir

  • 1.ReDoS : un regex 'malveillant' paralyse Python `re` exponentiellement ; TRE le traite linéairement
  • 2.TRE traite 10 millions de caractères plus vite que `re` sur 1000 caractères
  • 3.Pas de backtracking = immunité native aux attaques regex

Pourquoi ça devrait t'intéresser

Tu as une application qui laisse les utilisateurs entrer du texte à chercher ? Un formulaire de recherche avancée ? Une API publique ? Tu es exposé à une attaque ReDoS (Regular Expression Denial of Service).

L'idée : quelqu'un envoie un regex conçu pour exploiter l'algorithme de backtracking de Python, et boom, ton serveur tourne en boucle infinie. Pour 10 millions de caractères en entrée, c'est dix fois plus lent que sur du vrai contenu.

Comment TRE s'en sort mieux

TRE (Tre regexp engine) c'est une bibliothèque C ultra-fiable, utilisée par Redis et d'autres outils critiques. Elle n'a pas de backtracking — donc les attaques construites pour exploiter Python ne fonctionnent pas du tout.

Les chiffres : TRE traite un regex 'mauvais' sur 10 millions de caractères plus vite que Python re sur 1000 caractères. Et ça évolue linéairement, pas exponentiellement.

Le binding Python : comment l'utiliser

Simon Willison a demandé à Claude Code de créer un binding minimal en ctypes (zéro dépendances externes). C'est expérimental, mais ça marche : tu appelles TRE directement depuis Python.

Cas d'usage concrets :

  • Ton API accepte des patterns regex côté utilisateur → utilise TRE au lieu de re
  • Tu traites du texte massif → TRE sera plus stable
  • Tu veux dormir tranquille sans risquer une attaque ReDoS → c'est ici

Limitations

C'est un binding ctypes, donc moins fluide que des bibliothèques Python natives. Et TRE ne prend pas en charge 100% de la syntaxe regex Python (notamment les lookaheads, certains quantificateurs). À tester d'abord sur ton cas d'usage spécifique avant de passer en prod.

Newsletters Noésis

3 minutes d'IA dans ta boîte mail, chaque matin.

Rejoins les francophones qui comprennent, essaient et progressent avec l'IA. Choisis ce que tu veux recevoir. Désabonnement en 1 clic.