2013年2月8日金曜日

Tomcatで大量のパラメータを送信すると警告: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. と警告される

現象

Tomcat 7.0.32を使用していて、大量のパラメータがある画面をPOSTすると、サーブレットに渡ってこないパラメータがある。

原因

エラーが発生した画面ではパラメータの数がTomcatのConnectorの属性maxParameterCountのデフォルト値である10,000を超えていたため。

対応

TomcatのConnectorの属性maxParameterCountに適切な値を設定する。

背景

Weblogic環境で問題なく動作しているシステムの開発環境として、Tomcat7を使用している。
大量のパラメータをPOSTすると、サーブレットに後半の値が渡ってきていないために、java.lang.ArrayIndexOutOfBoundsExceptionが発生してしまっていた。
調査の過程で、Tomcatは、POSTサイズはデフォルトで2MBであることがわかったが、今回POSTサイズは300KB程度である。
しかも、2MBを超えたPOSTを送ると、java.lang.IllegalStateException: Post too largeというエラーが返ってくるそうだ。
ログを再度確認してみると、
警告: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.
と出ていた。
気づいていたのだが、読み飛ばしていた。
hashdos攻撃に対応するために、この値は必要最小限にすることが肝要であることが、Tomcatでのhashdos攻撃対策に書かれているが、とにかくパラメータが多いのでしょうがない。

0 件のコメント:

コメントを投稿