PCRE sınırları nelerdir?


11

ModSecurity'de PCRE limits exceededhatalar var.

Bu gibi kurallar ayarlayarak bunu düzeltebilir biliyorum:

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

Ancak, bu kurallar aslında ne yapıyor? PCRE özyinelemenin 150.000 olarak ayarlanması ne anlama gelir? Bunları bu kadar yükseğe ayarlayarak hangi güvenlik açıklarına izin veriyorum? Ne geliyor recursionve limitortalama?

Dokümantasyon olduğunu biliyorum, ancak dokümantasyon bana gerçekten neler olduğunu anlatmıyor, sadece direktiflerle nasıl çalışacağımı anlatıyor.


"Perl" etiketini "pcre" olarak değiştirmek için bu gönderiyi düzenliyorum. PCRE, kısaltmanın size inandığı şeye rağmen Perl değil.
Andy Lester

Yanıtlar:


13

Bunlar, bir metni bir kalıpla eşleştirmeye çalışmak için harcanan maksimum bellek / süreyi sınırlamak amacıyla PCRE motorunun dahili ayarları gibi görünmektedir. pcreapi Manpage anlayabileceği şekilde açıklamak biraz yapar:

Match_limit alanı, eşleşmeyecek, ancak arama ağaçlarında çok fazla olasılığı olan kalıpları çalıştırırken PCRE'nin çok miktarda kaynak kullanmasını önlemenin bir yolunu sunar. Klasik örnek, iç içe sınırsız tekrarların kullanılmasıdır.

Dahili olarak, PCRE, tekrar tekrar (bazen yinelemeli olarak) çağırdığı match () adlı bir işlevi kullanır. Match_limit tarafından ayarlanan sınır, bir maç sırasında bu fonksiyonun kaç kez çağrıldığına uygulanır; bu, gerçekleşebilecek geri izleme miktarını sınırlama etkisine sahiptir. Bağlantılı olmayan kalıplar için sayı, konu dizesindeki her konum için sıfırdan yeniden başlar.

Sınır için varsayılan değer PCRE oluşturulduğunda ayarlanabilir; varsayılan varsayılan 10 milyon'dur ve en uç durumlar hariç hepsini işler. Pcre_exec () öğesini match_limit öğesinin ayarlandığı bir pcre_extra bloğuyla ve bayraklar alanında PCRE_EXTRA_MATCH_LIMIT ayarlanmış olarak varsayılanı geçersiz kılabilirsiniz. Sınır aşılırsa pcre_exec (), PCRE_ERROR_MATCHLIMIT değerini döndürür.

Match_limit_recursion alanı match_limit alanına benzer, ancak match () öğesinin çağrılma sayısını sınırlamak yerine özyineleme derinliğini sınırlar. Yineleme derinliği, toplam çağrı sayısından daha küçük bir sayıdır, çünkü match () öğelerinin tümü yinelemeli değildir. Bu sınır yalnızca match_limit değerinden daha küçük olarak ayarlandığında kullanılır.

PCRE kitaplığı yerleşik varsayılan 10000000 olduğundan, tahminim uzun bir süre bekletilmesini önlemek için mod_security için daha düşük ayarın önerilmesidir.


modsecurity'nin varsayılan değeri 1M'den önemli ölçüde düşük olan 1500'dür. OP'nin 150000 değeri ayarı düşürmez, arttırır.
Paul Mougel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.