10

https トラフィックのオフロードに nginx を使用し、ポート 8080 で実行されているローカルにインストールされた jasperserver (5.2) にプロキシします。

internet ---(https/443)---> nginx ---(http/8080)---> tomcat/jasperserver

ポートで直接 jasperserver にアクセスする場合、すべて問題ありません。nginx を介してサービスにアクセスすると、一部の機能が壊れ (jasperserver UI でユーザーを編集するなど)、jasperserver ログに次のようなエントリが記録されます。

CSRFGuard: potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, uri:%request_uri%, error:%exception_message%)

いくつかのデバッグの後、この原因が見つかりました:

標準構成では、nginx は名前にアンダースコアを含むリクエスト ヘッダーを転送しません。ただし、Jasperserver (および OWASP フレームワーク) は、csrf トークン (JASPER_CSRF_TOKENおよびOWASP_CSRFTOKENそれぞれ) を送信するためにアンダースコアを使用するようにデフォルト設定されています。

解決策は次のいずれかです。

  • nginx: ヘッダーでアンダースコアを許可する

    server {
       ...
       underscores_in_headers on;
    
  • jasperserver: のトークン構成名を変更しますjasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties

こちらもご覧ください:

4

3 に答える 3