Diese Antwort wird einen umfassenderen Blick auf diese ungewöhnliche Querschnittssituation werfen, in der die Komplexitätstheorie auf die Cybersicherheit anwendbar ist und das Beispiel einige der signifikanten Nuancen / Feinheiten enthält, die in diesem Bereich auftreten können. Dies ähnelt im Wesentlichen einem "Injektionsangriff", bei dem bestimmte unerwartete Eingaben zu einem pathologischen Verhalten führen, das entweder zum Absturz eines Systems oder zu einer ungewöhnlich langen Zeit führt.
Wikipedia hat 15 Kategorien von Denial-of-Service-Angriffen, und dieser Angriff fällt in die Kategorie "Überschwemmungen auf Anwendungsebene" in dieser Liste. Ein anderes, etwas ähnliches Beispiel ist ein Angriff, der die Anwendungsprotokolle füllt.
Ein Fix für Injektionsangriffe besteht darin, "die Eingabe zu bereinigen". Der Anwendungsentwickler kann eine Neubewertung vornehmen, wenn es erforderlich ist, beliebige reguläre Ausdrücke zu kompilieren, die von einem potenziell böswilligen Benutzer bereitgestellt werden. Nur verschachtelte Ausdrücke im regulären Ausdruck oder einer ähnlichen Einschränkung zu entfernen, würde wahrscheinlich ausreichen, um diesen Angriff zu vermeiden. Während sie für viele moderne Softwareprodukte von grundlegender Bedeutung sind, können große Mengen an Funktionen bereitgestellt werden, ohne reguläre Ausdrücke auszuwerten. Auf den Kontext kommt es an, einige Anwendungen würden eine solche Sicherheit nicht benötigen.
Ein anderer Ansatz zur Verbesserung der Fehlertoleranz / Ausfallsicherheit, der hier anwendbar ist, sind Zeitüberschreitungen, die auf verschiedenen Ebenen des Software-Stacks / der Software-Hierarchie angegeben sind. Die Idee wäre, eine Zeit- / CPU- oder Anweisungsbegrenzung für eine "durchschnittliche" reguläre Ausdrucksbewertung anzugeben und sie vorzeitig zu beenden, wenn sie überschritten wird. Sie können mit benutzerdefinierten Lösungen implementiert werden, aber nicht viele Software- oder Programmiersprachen verfügen über integrierte Timeouts oder Frameworks für diesen Zweck.
Hier ist ein schönes Beispiel für die Verwendung von Zeitüberschreitungen zur Verbesserung der Fehlertoleranz. Außerdem wird eine allgemeine Architektur / Design / POV gezeigt, um solche Probleme zu mindern: Fehlertoleranz in einem verteilten System mit hohem Volumen / Netflix. Es hat nichts spezielles mit regulären Ausdrücken zu tun, aber darum geht es hier: Praktisch jede Logik auf Anwendungsebene kann in dieses Framework oder ähnliches passen.
Dieser Artikel weist darauf hin , wie Rückzieher kann insbesondere zu langsam regexp Matching führen. Regexps haben viele verschiedene Funktionen und man könnte versuchen zu bewerten, welche zu Worst-Case-Verhalten führen.
Hier ist eine schöne wissenschaftliche Übersicht über dieses spezielle Thema mit den vorgeschlagenen statischen Analyselösungen: