Код модуля Nginx проблемы с директивой error_page

Я использую ModSecurity WAF, чтобы помочь заблокировать tx, которые считаются опасными на NGINX:https://github.com/SpiderLabs/ModSecurityhttps://github.com/SpiderLabs/ModSecurity-nginx

Мою проблему можно найти здесь:https://github.com/SpiderLabs/ModSecurity-nginx/issues/182

TL; DR моей проблемы - это nginx error_pageДиректива сбрасывает заголовок метода HTTP-запроса, отправленный исходным клиентом во время его перенаправления на GET. Это вызывает ложные срабатывания журналов с WAF, чтобы сообщить, что клиент отправил тело HTTP с помощью GET и т. Д., Когда они действительно отправили POST, а NGINX попадает вerror_page перенаправление из-за некоторого времени ожидания восходящего потока при вызове обратного прокси.

Чтобы исправить это, мне нужно взломать или связать что-то с этим разделом файлов:https://github.com/SpiderLabs/ModSecurity-nginx/blob/master/src/ngx_http_modsecurity_rewrite.c

С целью сделать что-то вроде этого в коде sudo:

//SAFE to trust this value as its the originating client HTTP REQUEST Method HEADER when not error_page
if(!r->error_page){
   const char *n_method = ngx_str_to_char(r->method_name, r->pool);
  //HOW to add a transaction persistent context value here to store STORED_CTX_HTTP_REQUEST_METHOD_HEADER_VALUE???
}
else {  //IF ERROR_PAGE, then we need to grab the original stored CTX request http method header value.
  const char *n_method = ngx_str_to_char(STORED_CTX_HTTP_REQUEST_METHOD_HEADER_VALUE); 
}

И именно здесь мне не удалось решить приведенный выше код sudo. Как создать здесь контекстно-безопасную переменную tx, которая может сохраняться на всех этапах и во внутреннейerror_page перенаправить для хранения исходного заголовка клиентского http-метода?

Я попал на эти руководства по страницам NGINX, но до сих пор ни один кубик не видел ничего, что режет то, что я хочу:https://www.evanmiller.org/nginx-modules-guide.html

Ищу любого гуру NGINX / C, который понимает проблему и может превратить мой код sudo во что-то, что я могу протестировать в своей среде песочницы.

Обратите внимание: я не могу позволить себе отказаться от вызовов директивы NGINX error_page. Я считаю, что мне нужно решение для приведенного выше кода sudo.

Спасибо!

2 ответа

Решение

Исправление, которое я выбрал, можно увидеть здесь:https://github.com/SpiderLabs/ModSecurity-nginx/pull/204

Нет причин повторно обрабатывать запросы клиентов на самых ранних этапах. Это был самый простой подход. Мне просто нужно было сделать шаг назад на высоком уровне и подумать о том, что здесь происходит, в поисках наиболее элегантного решения.

Спасибо, что поделился! Некоторые похожие проблемы мы решили при разработке модуля Wallarm Nginx. Короткий ответ - да, здесь использовалась неправильная фаза Nginx. Причина проста - это порт ModSecurity от Apache, где фазы Nginx не имеют значения.

Я спрошу нашу команду разработчиков, можем ли мы помочь с патчем.

Другие вопросы по тегам