Essas parecem ser configurações internas do mecanismo PCRE, a fim de limitar a quantidade máxima de memória / tempo gasto na tentativa de corresponder algum texto a um padrão. A página de pcreapi
manual faz pouco para explicá-lo nos termos do leigo:
O campo match_limit fornece um meio de impedir que o PCRE use uma grande quantidade de recursos ao executar padrões que não corresponderão, mas que possuem um número muito grande de possibilidades em suas árvores de pesquisa. O exemplo clássico é o uso de repetições ilimitadas aninhadas.
Internamente, o PCRE usa uma função chamada match () que chama repetidamente (às vezes recursivamente). O limite definido por match_limit é imposto ao número de vezes que essa função é chamada durante uma partida, o que tem o efeito de limitar a quantidade de retorno que pode ocorrer. Para padrões que não são ancorados, a contagem é reiniciada a partir de zero para cada posição na sequência de assunto.
O valor padrão para o limite pode ser definido quando o PCRE é construído; o padrão é 10 milhões, que lida com todos os casos, exceto os mais extremos. Você pode substituir o padrão fornecendo pcre_exec () a um bloco pcre_extra no qual match_limit está definido e PCRE_EXTRA_MATCH_LIMIT está definido no campo flags. Se o limite for excedido, pcre_exec () retornará PCRE_ERROR_MATCHLIMIT.
O campo match_limit_recursion é semelhante ao match_limit, mas, em vez de limitar o número total de vezes que match () é chamado, limita a profundidade da recursão. A profundidade da recursão é um número menor que o número total de chamadas, porque nem todas as chamadas para correspondência () são recursivas. Esse limite é útil apenas se for definido menor que match_limit.
Como o padrão interno da biblioteca PCRE é 10000000, meu palpite é que a configuração mais baixa é sugerida para mod_security, a fim de impedir que as solicitações sejam retidas por um longo tempo.