Dies scheinen Einstellungen innerhalb der PCRE-Engine zu sein, um die maximale Menge an Speicher / Zeit zu begrenzen, die für den Versuch aufgewendet wird, Text mit einem Muster abzugleichen. Die pcreapi
Manpage erklärt es nur wenig mit Laien:
Das Feld match_limit bietet eine Möglichkeit, zu verhindern, dass PCRE eine große Menge an Ressourcen verbraucht, wenn Muster ausgeführt werden, die nicht übereinstimmen, deren Suchbäume jedoch eine sehr große Anzahl von Möglichkeiten bieten. Das klassische Beispiel ist die Verwendung verschachtelter unbegrenzter Wiederholungen.
Intern verwendet PCRE eine Funktion namens match (), die wiederholt (manchmal rekursiv) aufgerufen wird. Das durch match_limit festgelegte Limit wird festgelegt, wie oft diese Funktion während eines Matchs aufgerufen wird, wodurch der Umfang des Backtracking begrenzt wird, der stattfinden kann. Bei Mustern, die nicht verankert sind, wird die Zählung für jede Position in der Betreffzeichenfolge von Null neu gestartet.
Der Standardwert für das Limit kann festgelegt werden, wenn PCRE erstellt wird. Der Standardwert ist 10 Millionen, was alle bis auf die extremsten Fälle behandelt. Sie können die Standardeinstellung überschreiben, indem Sie pcre_exec () mit einem pcre_extra-Block ergänzen, in dem match_limit festgelegt ist, und PCRE_EXTRA_MATCH_LIMIT im Feld flags. Wenn das Limit überschritten wird, gibt pcre_exec () PCRE_ERROR_MATCHLIMIT zurück.
Das Feld match_limit_recursion ähnelt match_limit, begrenzt jedoch nicht die Gesamtzahl der Aufrufe von match (), sondern die Rekursionstiefe. Die Rekursionstiefe ist kleiner als die Gesamtzahl der Aufrufe, da nicht alle Aufrufe von match () rekursiv sind. Diese Grenze ist nur dann von Nutzen, wenn sie kleiner als match_limit ist.
Da die in der PCRE-Bibliothek integrierte Standardeinstellung 10000000 ist, wird meiner Meinung nach die niedrigere Einstellung für mod_security empfohlen, um zu verhindern, dass Anforderungen für längere Zeit angehalten werden.