Ini tampaknya merupakan pengaturan internal mesin PCRE untuk membatasi jumlah maksimum memori / waktu yang dihabiskan untuk mencoba mencocokkan beberapa teks dengan suatu pola. Halaman pcreapi
manual tidak banyak menjelaskannya dalam istilah awam:
Bidang match_limit menyediakan cara untuk mencegah PCRE menggunakan sumber daya dalam jumlah besar saat menjalankan pola yang tidak akan cocok, tetapi memiliki sejumlah besar kemungkinan di pohon pencarian mereka. Contoh klasik adalah penggunaan pengulangan tak terbatas bersarang.
Secara internal, PCRE menggunakan fungsi yang disebut kecocokan () yang dipanggil berulang kali (kadang secara rekursif). Batas yang ditetapkan oleh match_limit dikenakan pada berapa kali fungsi ini dipanggil selama pertandingan, yang memiliki efek membatasi jumlah backtracking yang dapat terjadi. Untuk pola yang tidak berlabuh, hitungan dimulai kembali dari nol untuk setiap posisi dalam string subjek.
Nilai default untuk batas dapat ditetapkan ketika PCRE dibangun; default default adalah 10 juta, yang menangani semua kecuali kasus yang paling ekstrim. Anda dapat mengganti default dengan memasok pcre_exec () dengan blok pcre_extra di mana match_limit diatur, dan PCRE_EXTRA_MATCH_LIMIT diatur di bidang bendera. Jika batas terlampaui, pcre_exec () mengembalikan PCRE_ERROR_MATCHLIMIT.
Bidang match_limit_recursion mirip dengan match_limit, tetapi alih-alih membatasi jumlah total waktu yang cocok () dipanggil, bidang ini membatasi kedalaman rekursi. Kedalaman rekursi adalah jumlah yang lebih kecil dari jumlah total panggilan, karena tidak semua panggilan yang cocok () bersifat rekursif. Batas ini hanya digunakan jika ditetapkan lebih kecil dari match_limit.
Karena pustaka bawaan PCRE adalah 10000000, tebakan saya adalah bahwa pengaturan yang lebih rendah disarankan untuk mod_security untuk mencegah permintaan ditahan untuk waktu yang lama.