C语言 Nginx 模块代码 error_page指令问题



我正在利用ModSecurity WAF来帮助阻止NGINX上被视为危险的tx: https://github.com/SpiderLabs/ModSecurity https://github.com/SpiderLabs/ModSecurity-nginx

我的问题可以在这里找到: https://github.com/SpiderLabs/ModSecurity-nginx/issues/182

我的问题的TLDR是nginxerror_page指令重置原始客户端在重定向到GET期间发送的HTTP请求方法标头。这会导致 WAF 的误报日志报告客户端在真正发送 POST 时发送了带有 GET 等的 HTTP 正文,并且 NGINX 由于反向代理调用上行超时的某些情况而命中error_page重定向。

要解决此问题,我需要在此文件部分进行黑客入侵或公关,似乎: https://github.com/SpiderLabs/ModSecurity-nginx/blob/master/src/ngx_http_modsecurity_rewrite.c#L145

在 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 代码。

谢谢!

我最终使用的修复程序可以在这里看到: https://github.com/SpiderLabs/ModSecurity-nginx/pull/204

没有理由在最早阶段重新处理客户端请求。这是最简单的方法。我只需要退后一步,考虑这里发生的事情,以获得最优雅的解决方案。

感谢分享! 我们在开发Wallarm Nginx模块时解决了一些类似的问题。 简短的回答是肯定的,这里使用了错误的Nginx阶段。原因很简单 - 这是来自Apache的ModSecurity端口,其中Nginx阶段无关紧要。

我会询问我们的开发团队是否可以帮助修补补丁。

相关内容

  • 没有找到相关文章

最新更新