สิ่งเหล่านี้ดูเหมือนจะเป็นการตั้งค่าภายในของเอ็นจิ้น PCRE เพื่อ จำกัด จำนวนหน่วยความจำ / เวลาสูงสุดที่ใช้ในการพยายามจับคู่ข้อความกับรูปแบบ pcreapi
manpageไม่น้อยที่จะอธิบายในแง่ของคนธรรมดา:
ฟิลด์ match_limit จัดให้มีวิธีการป้องกัน PCRE จากการใช้ทรัพยากรจำนวนมากเมื่อใช้รูปแบบที่ไม่ตรงกัน แต่มีความเป็นไปได้จำนวนมากในแผนผังการค้นหา ตัวอย่างคลาสสิกคือการใช้ซ้ำไม่ จำกัด ซ้อนกัน
ภายใน PCRE ใช้ฟังก์ชันที่เรียกว่าการจับคู่ () ซึ่งเรียกซ้ำ ๆ (บางครั้งเรียกซ้ำ) ขีด จำกัด ที่กำหนดโดย match_limit จะถูกกำหนดตามจำนวนครั้งที่ฟังก์ชันนี้ถูกเรียกใช้ในระหว่างการแข่งขันซึ่งมีผลในการ จำกัด จำนวนของการย้อนรอยที่สามารถเกิดขึ้นได้ สำหรับรูปแบบที่ไม่ได้ยึดการนับจะเริ่มใหม่จากศูนย์สำหรับแต่ละตำแหน่งในสตริงหัวเรื่อง
สามารถตั้งค่าเริ่มต้นสำหรับขีด จำกัด เมื่อสร้าง PCRE ค่าเริ่มต้นเริ่มต้นคือ 10 ล้านซึ่งจัดการทั้งหมดยกเว้นกรณีที่รุนแรงที่สุด คุณสามารถลบล้างค่าเริ่มต้นได้โดย suppling pcre_exec () ด้วยบล็อก pcre_extra ที่ match_limit ตั้งไว้และ PCRE_EXTRA_MATCH_LIMIT ถูกตั้งค่าในฟิลด์ค่าสถานะ หากเกินขีด จำกัด pcre_exec () จะส่งคืน PCRE_ERROR_MATCHLIMIT
ฟิลด์ match_limit_recursion นั้นคล้ายกับ match_limit แต่แทนที่จะ จำกัด จำนวนครั้งทั้งหมดที่การจับคู่ () ถูกเรียกใช้จะเป็นการจำกัดความลึกของการเรียกซ้ำ ความลึกของการเรียกซ้ำเป็นจำนวนที่น้อยกว่าจำนวนการโทรทั้งหมด ขีด จำกัด นี้ใช้เฉพาะเมื่อตั้งค่าน้อยกว่า match_limit
เนื่องจากค่าเริ่มต้นของไลบรารี PCRE ในตัวคือ 10,000,000 ฉันเดาว่าควรตั้งค่าที่ต่ำกว่าสำหรับ mod_security เพื่อป้องกันคำขอจากการถูกระงับไว้เป็นเวลานาน