ข้อ จำกัด PCRE คืออะไร


11

ใน ModSecurity มีPCRE limits exceededข้อผิดพลาด

ฉันรู้ว่าฉันสามารถแก้ไขได้โดยการตั้งกฎเช่น:

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

แต่กฎเหล่านี้กำลังทำอะไรอยู่? PCRE จำกัด การเรียกซ้ำที่ตั้งค่าเป็น 150,000 หมายถึงอะไร ฉันอนุญาตให้มีการรักษาความปลอดภัยใดโดยการตั้งค่าระดับสูงเหล่านี้ อะไรrecursionและlimitหมายความว่าอย่างไร

ฉันรู้ว่ามีเอกสาร แต่เอกสารไม่ได้บอกฉันจริงว่าเกิดอะไรขึ้นฉันแค่บอกวิธีทำงานกับคำสั่ง


ฉันกำลังแก้ไขโพสต์นี้เพื่อเปลี่ยนแท็ก "perl" เป็น "pcre" PCRE ไม่ใช่ Perl แม้จะมีคำย่อที่คุณเชื่อ
Andy Lester

คำตอบ:


13

สิ่งเหล่านี้ดูเหมือนจะเป็นการตั้งค่าภายในของเอ็นจิ้น 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 เพื่อป้องกันคำขอจากการถูกระงับไว้เป็นเวลานาน


modsecurity ดูเหมือนว่าจะมีค่าเริ่มต้นที่ 1500ซึ่งต่ำกว่า 1M อย่างมาก ค่าของ OP ของ 150000 จะเป็นการเพิ่มการตั้งค่าไม่ลดลง
Paul Mougel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.