0

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 リクエスト メソッド ヘッダーをリセットすることです。error_pageこれにより、クライアントが実際に POST を送信し、リバース プロキシ呼び出しでアップストリームのタイムアウトが発生した場合にNGINX がリダイレクトにヒットしたときに、クライアントが GET などで HTTP ボディを送信したことを報告する WAF の誤検知ログが発生します。

これを修正するには、このファイル セクションに何かをハックするか PR する必要があるようです: 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 コードを解決できなかったのはここです。error_page元のクライアントの http メソッド ヘッダーを格納するために、フェーズと内部リダイレクト全体で保持できる tx コンテキスト セーフ変数をここで作成するにはどうすればよいでしょうか。

私はこれらの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 に答える