2013-08-14 7 views
8

Ich habe Tonnen von Problemen mit Mod Security. Ich bin beschäftigt, ein CMS für ein Projekt bei der Arbeit zu schreiben, und während ich eine Seite entwickelte, um einen bestimmten Datenbankeintrag zu bearbeiten, bekam ich 403 Fehler. Nachdem ich stundenlang meinen Kopf gegen meinen Schreibtisch geschlagen hatte und einige Bits des Codes angepasst hatte, änderte ich schließlich das Skript, in das mein Formular geschrieben wurde, um ein einfaches echo "test"; zu enthalten. Selbst das Einreichen dieser einfachen Seite führte zu einem 403 Fehler. Ich habe mit meinem Formular herumgespielt und ich fand schließlich, dass, wenn ich die Menge der Daten reduzierte, die ich das gesendete Formular gut eingereicht hatte (insbesondere reduziere ich die Menge des Textes innerhalb eines Textareas).ModSecurity maximale Post-Limits (PCRE-Limit-Fehler)

Nachdem die Protokolle Überprüfung (Ja, das war nicht das erste, was ich tat - seufz) bemerkte ich, dass ich zahlreiche Fehler aus ModSecurity, wie war immer:

[Mon Aug 12 16:34:45 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Failed to access DBM file "/etc/httpd/logs//global": Permission denied [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkAlW1shFcAAHTMK80AAAAF"] 
[Mon Aug 12 16:34:45 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Failed to access DBM file "/etc/httpd/logs//ip": Permission denied [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkAlW1shFcAAHTMK80AAAAF"] 
[Mon Aug 12 17:11:33 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Rule execution error - PCRE limits exceeded (-8): (null). [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkJNW1shFcAAHXUMHkAAAAH"] 
[Mon Aug 12 17:11:33 2013] [error] [client XX.XXX.XXX.XXX] ModSecurity: Access denied with code 403 (phase 2). Match of "streq 0" against "TX:MSC_PCRE_LIMITS_EXCEEDED" required. [file "/etc/httpd/conf.d/mod_security.conf"] [line "93"] [msg "ModSecurity internal error flagged: TX:MSC_PCRE_LIMITS_EXCEEDED"] [hostname "XXXXXXX.XXX"] [uri "/admin/index.php"] [unique_id "UgkJNW1shFcAAHXUMHkAAAAH"] 

Ich habe Herumspielen , Googeln und Regeln für Tage vergeblich ändern. Das einzige, was ich zu tun vermag, ist, ModSecurity für diesen vhost auszuschalten. Das ist für mich in Ordnung, während ich das CMS entwickle, aber in der Produktion ist das nicht wirklich etwas, was ich machen möchte. Hat jemand irgendwelche Ideen, was dieses Problem verursacht und wie man es sortiert? Die Protokolle scheinen bei einigen Art Regeln zu Punkt mit regulären Ausdruck Grenzen zu tun, aber da Skript meinen Beitrag zu ändern Empfang nur um das Wort Test auszudrucken ich nichts mit ihnen zu tun (Obwohl ich versucht habe, die Grenzen durch SecPcreMatchLimit und SecPcreMatchLimitRecursion Upping). Es scheint eher, dass etwas mit der Menge der Daten falsch ist, die ich aussende.

+0

sehe ich das gleiche Problem habe und wie jetzt ich habe 2 Apache Prozesse, die mit 100% CPU ausgeführt werden ... Auf einem 8-Core ist es in gewisser Weise nicht schlecht, aber es bedeutet auch, dass einige Benutzer nicht bedient werden! –

Antwort

1

Ich hatte ein ähnliches Problem mit PCRE-Modul vor ein paar Wochen und es war mit Backtrack_limits verwandt.

Ich nehme an, SecPcreMatchLimit und SecPcreMatchLimitRecursion sind mit mod_security verwandt, aber haben Sie versucht, die Werte für pcre-Modul in Ihrer php.ini-Datei oder während PHP-Ausführungszeit zu erhöhen?

pcre.backtrack_limit und pcre.recursion_limit

könnten Sie auch bestätigen, ob das Problem auf PCRE Grenzen mit der folgenden Funktion preg_last_error()

verwandt Mehr erfahren Sie hier sehen: http://php.net/manual/en/function.preg-last-error.php

und hier: http://www.php.net/manual/en/pcre.constants.php

Ich hoffe, das hilft.

+0

Es tut mir leid, es ist eine Weile her, seit ich dieses Problem gepostet habe. Ich setze diese PCRE-Werte in der php.ini-Datei, die ich denke (Sicherlich nicht während der Ausführung mit 'ini_set()' oder irgendetwas). Auch .. Ich bin nicht in der Lage zu tun 'preg_last_error()' seit der Seite sogar 403s für einen einfachen 'Echo "Test"; – Jonathon

+1

Mein Problem scheint zu sein, dass ModSecurity behandelt die Daten, die ich als verdächtig für einige durch Grund, anstatt tatsächlich etwas mit PCRE zu tun – Jonathon

+2

Die Hälfte dieser Antwort ist falsch. Es hat definitiv nichts mit PHP zu tun, da Apache das Modul ModSecurity ausführt. Eigentlich sagt Jonathon ausdrücklich, dass wenn er ModSecurity ausschaltet, seine Seite gut funktioniert. –

1

Ich habe gerade ein ähnliches Problem gelöst, mit einer großen Post PCRE-Limit-Fehler in mehreren Regeln auslösen. Ich glaube, es ist falsch für mod-Sicherheit dann die Anforderung als böswillige Flagge, nur weil es explodierte!

Ich habe die beiden Einstellungen, die Sie erwähnt haben, vom Standardwert 1500 auf 1500 erhöht, wie in diesem Beitrag empfohlen, und es hat mein Problem gelöst.

Die Standardwerte für das PCRE-Match-Limit sind sehr, sehr niedrig mit ModSecurity. Du kannst bis zu 500K erreichen, ohne dein Set zu beschädigen. Aber zu Ihrer Information: Das PCRE-Match-Limit soll die Chance für einen DoS-Angriff über Reguläre Ausdrücke reduzieren. Wenn Sie also die Grenze von erhöhen, erhöhen Sie Ihre Sicherheitsanfälligkeit in dieser Hinsicht, aber die PCRE-Fehler sind aus Sicherheitsgründen wesentlich schlechter.Ich laufe mit 500K in prod in der Regel:

SecPcreMatchLimit 500000 SecPcreMatchLimitRecursion 500000

https://github.com/SpiderLabs/owasp-modsecurity-crs/issues/656

Auch https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecPcreMatchLimit