← Ressourcen RESOURCE
Langsame reguläre Ausdrücke und katastrophales Backtracking (ReDoS) vermeiden, das Dienste lahmlegt.

Die meisten regulären Ausdrücke sind sehr schnell, doch bei bestimmten Mustern kann die Laufzeit je nach Eingabelänge exponentiell ansteigen. Dies nennt man katastrophales Backtracking, und einen Angriff, der einen Server durch bösartige Eingaben zum Stillstand bringt, bezeichnet man als ReDoS (Regular Expression Denial of Service).

Die häufigste Ursache sind verschachtelte Quantoren. Wenn sich wie bei (a+)+ oder (.*)* Wiederholungen in Wiederholungen überlagern und das Ende scheitert, versucht die Engine alle möglichen Aufteilungen durch und explodiert. Auch mehrdeutige Alternativen wie (a|a)* verursachen dasselbe Problem.

Der Kern der Vorbeugung ist, Mehrdeutigkeit zu beseitigen. Fassen Sie sich überlappende Wiederholungen zu einer zusammen, engen Sie den Bereich statt mit .* mit [^x]* ein und ziehen Sie nach Möglichkeit atomare Gruppen oder possessive Quantoren (die es in JavaScript nicht gibt) in Betracht. Auch eine Begrenzung der Eingabelänge ist in der Praxis wirksam.

Da dieser Tester im Browser läuft, machen gefährliche Muster lediglich Ihren Tab kurz langsam. Prüfen Sie jedoch unbedingt die Performance, bevor Sie dasselbe Muster auf dem Server mit nicht vertrauenswürdigen Eingaben verwenden.