Я исправляю дефолт php-url-fopen фильтр, чтобы разрешить некоторые параметры запроса GET, которые я использую в своей системе (он не является общедоступным, но я все же хотел бы заблокировать ненужные запросы). Проблема в том, что у меня есть рабочее регулярное выражение для одного имени параметра, но я не могу получить рабочее регулярное выражение для двух параметров, где второй параметр объединен из двух имен. Я использую fail2ban 0.8.11 - вот рабочее (неуспешное) регулярное выражение:
^<HOST> -.*"(GET|POST).*\?.*(?<!outer)\=http\:\/\/.* HTTP\/.*$
А вот регулярное выражение, которое не работает:
^<HOST> -.*"(GET|POST).*\?.*(?<!outer|type\=outer\&url)\=http\:\/\/.* HTTP\/.*$
Когда я пытаюсь запустить службу fail2ban с неработающим регулярным выражением, я получаю следующее сообщение:
ERROR NOK: ('Unable to compile regular expression \'^(?:::f{4,6}:)?(?P<host>[\\w\\-.^_]*\\w) -.*"(GET|POST).*\\?.*(?<!outer|type\\=outer\\&url)\\=http\\:\\/\\/.* HTTP\\/.*$\'',)
Любая помощь будет оценена.
Решение моего второго регулярного выражения:
^<HOST> -.*"(GET|POST).*\?.*(?<!outer)(?<!type\=outer\&url)\=http\:\/\/.* HTTP\/.*$
Оба слова / параметра в запросе GET должны быть разделены и содержаться только в одном отрицательном поиске назад.