← Ressources RESOURCE
Éviter les expressions régulières lentes et le backtracking catastrophique (ReDoS) qui peut paralyser un service.

La plupart des expressions régulières sont très rapides, mais certains motifs peuvent voir leur temps d'exécution croître de façon exponentielle selon la longueur de l'entrée. C'est ce qu'on appelle le backtracking catastrophique, et l'attaque qui consiste à figer un serveur avec une entrée malveillante est nommée ReDoS (déni de service par expression régulière).

La cause la plus fréquente est celle des quantificateurs imbriqués. Lorsque des répétitions se chevauchent à l'intérieur d'une répétition, comme (a+)+ ou (.*)*, et que la suite échoue, le moteur explose en essayant toutes les découpes possibles. Une alternance ambiguë comme (a|a)* provoque le même problème.

La clé de la prévention est d'éliminer l'ambiguïté. Fusionnez les répétitions qui se chevauchent, resserrez la portée en écrivant par exemple [^x]* au lieu de .*, et, si possible, envisagez les groupes atomiques ou les quantificateurs possessifs (absents de JavaScript). Limiter la longueur de l'entrée est aussi efficace en pratique.

Comme ce testeur s'exécute dans le navigateur, un motif dangereux ne fera que ralentir brièvement votre onglet ; mais avant d'utiliser le même motif côté serveur sur des entrées non fiables, vérifiez impérativement ses performances.