ये किसी पाठ को किसी पैटर्न से मिलाने की कोशिश में खर्च की गई अधिकतम मात्रा की स्मृति / समय को सीमित करने के लिए PCRE इंजन की आंतरिक सेटिंग्स प्रतीत होती हैं। pcreapi
मैनपेज आम आदमी की दृष्टि में यह समझाने के लिए थोड़ा करता है:
Match_limit फ़ील्ड PCRE को संसाधनों की एक बड़ी मात्रा का उपयोग करने से रोकने का एक साधन प्रदान करता है जब चलने वाले पैटर्न जो मैच नहीं कर रहे हैं, लेकिन जिनके खोज पेड़ों में बहुत बड़ी संख्या में संभावनाएं हैं। क्लासिक उदाहरण नेस्टेड असीमित दोहराव का उपयोग है।
आंतरिक रूप से, PCRE एक फ़ंक्शन का उपयोग करता है जिसे मैच कहा जाता है () जिसे वह बार-बार कॉल करता है (कभी-कभी पुनरावर्ती)। मैच_लिमिट द्वारा निर्धारित की गई सीमा को एक मैच के दौरान कॉल करने की संख्या पर लगाया जाता है, जिस पर लगने वाले बैकट्रैकिंग की मात्रा को सीमित करने का प्रभाव पड़ता है। उन पैटर्न के लिए जिन्हें एंकर नहीं किया गया है, गिनती विषय स्ट्रिंग में प्रत्येक स्थिति के लिए शून्य से पुनरारंभ होती है।
सीमा के लिए डिफ़ॉल्ट मान तब सेट किया जा सकता है जब पीसीआरई बनाया जाता है; डिफ़ॉल्ट डिफ़ॉल्ट 10 मिलियन है, जो सभी लेकिन सबसे चरम मामलों को संभालता है। आप एक pcre_extra ब्लॉक के साथ pcre_exec () को दबाकर डिफ़ॉल्ट को ओवरराइड कर सकते हैं जिसमें match_limit सेट किया गया है, और PCRE_EXTRA_MATCH_LIMIT को झंडे के क्षेत्र में सेट किया गया है। यदि सीमा पार हो गई है, तो pcre_exec () PCRE_ERROR_MATCHLIMIT लौटाता है।
Match_limit_recursion फ़ील्ड match_limit के समान है, लेकिन मैच () कहा जाने वाले कुल समय को सीमित करने के बजाय, यह पुनरावृत्ति की गहराई को सीमित करता है। पुनरावृत्ति की गहराई कुल संख्याओं की तुलना में एक छोटी संख्या है, क्योंकि सभी कॉल मैच () के लिए पुनरावर्ती नहीं हैं। यह सीमा केवल तभी उपयोग की जाती है जब इसे match_limit से छोटा सेट किया जाता है।
चूंकि पीसीआरई लाइब्रेरी अंतर्निहित डिफ़ॉल्ट 10000000 है, मेरा अनुमान है कि अनुरोधों को लंबे समय तक आयोजित होने से रोकने के लिए mod_security के लिए निम्न सेटिंग का सुझाव दिया गया है।