Estas parecen ser configuraciones internas del motor PCRE para limitar la cantidad máxima de memoria / tiempo invertido en tratar de hacer coincidir un texto con un patrón. La página de pcreapi
manual hace poco para explicarlo en términos simples:
El campo match_limit proporciona un medio para evitar que PCRE use una gran cantidad de recursos al ejecutar patrones que no van a coincidir, pero que tienen una gran cantidad de posibilidades en sus árboles de búsqueda. El ejemplo clásico es el uso de repeticiones ilimitadas anidadas.
Internamente, PCRE utiliza una función llamada match () que llama repetidamente (a veces de forma recursiva). El límite establecido por match_limit se impone al número de veces que se llama a esta función durante una partida, lo que tiene el efecto de limitar la cantidad de retroceso que puede tener lugar. Para los patrones que no están anclados, el recuento se reinicia desde cero para cada posición en la cadena de asunto.
El valor predeterminado para el límite se puede establecer cuando se construye PCRE; el valor predeterminado predeterminado es 10 millones, que maneja todos menos los casos más extremos. Puede anular el valor predeterminado al sustituir pcre_exec () con un bloque pcre_extra en el que se establece match_limit y PCRE_EXTRA_MATCH_LIMIT se establece en el campo de marcas. Si se excede el límite, pcre_exec () devuelve PCRE_ERROR_MATCHLIMIT.
El campo match_limit_recursion es similar a match_limit, pero en lugar de limitar el número total de veces que se llama a match (), limita la profundidad de la recursividad. La profundidad de recursión es un número menor que el número total de llamadas, porque no todas las llamadas a la coincidencia () son recursivas. Este límite es de uso solo si se establece más pequeño que match_limit.
Dado que el valor predeterminado incorporado de la biblioteca PCRE es 10000000, supongo que se sugiere la configuración más baja para mod_security para evitar que las solicitudes se retengan durante mucho tiempo.