0

我正在利用 ModSecurity WAF 来帮助阻止 tx 在 NGINX 上被认为是危险的: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 的误报日志报告客户端发送了一个带有 GET 等的 HTTP 正文,当他们真正发送一个 POST 并且 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

寻找任何了解该问题并可能能够将我的 sudo 代码转换为我可以在我的沙盒环境中测试的东西的 NGINX / C 大师。

注意我没有放弃我的 NGINX error_page 指令调用的奢侈。所以我确实需要一个我相信的上述 sudo 代码的解决方案。

谢谢!

4

2 回答 2

1

我最终解决的问题可以在这里看到: https ://github.com/SpiderLabs/ModSecurity-nginx/pull/204

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

于 2020-05-22T07:48:34.050 回答
0

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

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

于 2020-05-14T19:56:50.910 回答