Код модуля 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 не имеют значения.
Я спрошу нашу команду разработчиков, можем ли мы помочь с патчем.