mod_security - Przekroczono limity PCRE

11

Prawie na każde żądanie pojawia się następujący błąd:

Rule execution error - PCRE limits exceeded (-8): (null).

Po wielu googlowaniach wydaje się, że jedynym rozwiązaniem są

a) Dodaj następujące elementy do swojego httpd.conf

SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

b) Dodaj następujące elementy do swojego php.ini

pcre.backtrack_limit = 10000000
pcre.recursion_limit = 10000000

c) Użyj wersji skompilowanej z -disable-pcre-match-limitopcją.


Uruchomiam następujące:

ModSecurity for Apache / 2.5.12 ( http://www.modsecurity.org/ ).

Apache / 2.2.16 (Debian) PHP / 5.3.3-7 + squeeze8 z łatką Suhosin mod_ssl / 2.2.16 OpenSSL / 0.9.8

Do moich zasad ModSec używam OWASP ModSecurity Core Rule Set Project wersja (CRS) wersja 2.2.3, która jest najnowsza od tego postu.

Mój httpd.conf składa się zasadniczo:

<IfModule security2_module>
    SecUploadDir /var/asl/data/suspicious
    SecDataDir /var/asl/data/msa
    SecTmpDir /tmp
    SecAuditLogStorageDir /var/asl/data/audit

    Include modsecurity.d/modsecurity_crs_10_config.conf
    Include modsecurity.d/activated_rules/*.conf

    SecRuleEngine On

    # Debug log
    SecDebugLog /var/log/apache2/modsec_debug.log
    SecDebugLogLevel 3

    # Serial audit log
    SecAuditEngine RelevantOnly
    SecAuditLogRelevantStatus ^5
    SecAuditLogParts ABIFHZ
    SecAuditLogType Serial
    SecAuditLog /var/log/apache2/modsec_audit.log

    SecPcreMatchLimit 150000
    SecPcreMatchLimitRecursion 150000

</IfModule>


<IfModule mod_php5.c>
    php_admin_flag pcre.backtrack_limit 10000000
    php_admin_flag pcre.recursion_limit 10000000
</IfModule>

Z których w moim modsecurity.dkatalogu są tylko wszystkie domyślne reguły CRS w pliku instalacyjnym. Ustawiłem również limity pcre na 150000000 i 100000000000 i więcej, ale na niedostępne.

Podsumowując:

rozwiązania ai bnie działają, i wolę nie robić c... ponieważ tak naprawdę nie rozumiem / lubię kompilować.

Czy ktoś ma jakieś inne pomysły?

ParoX
źródło
Mam to również przy użyciu najnowszych podstawowych reguł i kodu źródłowego mod_security, które właśnie pobrałem. Otrzymuję te błędy dla aplikacji Rails, a nie PHP.
Dogweather

Odpowiedzi:

7

Święta rekurencja, Batman!

Twierdzę, że masz coś złego w swoich zasadach mod_security. Tego rodzaju rekurencja wydaje się niepotrzebna i najprawdopodobniej spowoduje poważne obciążenie serwera. Napraw reguły i / lub konfigurację Apache i nie próbuj „naprawiać” tego problemu dowolnie dużymi liczbami.

Janne Pikkarainen
źródło
4

Przyglądam się temu uważnie, ponieważ mam dokładnie ten sam problem, a Twoja konfiguracja wygląda podobnie do mojej. Jestem pierwszy raz na modsecurity, to nie jest dokładnie przyjazne noob!

Zgadzam się z Janne. Jedyną radą, jaką mam do tej pory, jest usunięcie wszystkich podstawowych zasad i ponowne ich wprowadzenie 1 na 1, aby zacząć zawężać problem. Zaraz to zrobię.

Powinieneś także zmienić ustawienie silnika reguł na

SecRuleEngine DetectionOnly

podczas pracy nad problemami z konfiguracją pozwoli ci to monitorować bez wymuszania - nie chcesz egzekwować reguł, ale nadal nie masz pewności, że robią to, co chcesz.

Jeśli znajdziesz rozwiązanie, odeślij je ponownie.

Paul Fernihough
źródło
0
SecPcreMatchLimit 150000
SecPcreMatchLimitRecursion 150000

Należy znaleźć i zmienić w plikach konfiguracyjnych mod_security w niektórych wersjach * nix.

Egils
źródło