1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPにおけるPOST要素数制限の挙動について

Posted at

Wildfly利用にあたって、1回のPOST処理内に含まれる要素数(input の数、といえばよいか?)について古いJBOSSと異なり制約があることを今更知った。
そういえばPHPでも同じような話があったよな、と思い少し調べてみた。

POSTをenctype defaultで実行すると、POSTの実体はGETと同じようにkey1=value&key2=value のような&で区切られたパラメータとして扱われる。
結構前から各処理系においてDoS対策などのためにこの要素数の上限が設定されている。

PHPにおいてはphp.ini内の"max_input_vars"で要素数制限ができる。
defaultは1000。

で、今回のポイント。
JAVAなどで組んでいたシステムではこのパラメータ数を回避する策として、enctypeをmultipart/form-data として、boundaryで区切られているがデータとしては1件として送るような対策を打った。
ところが、PHPの場合はこれが機能しない。

PHPにおいてはPOSTされたデータは $_POST スーパーグローバル変数に格納されるのだが、ご丁寧にmultipart/form-dataの場合でも内容をちゃんと解析して連想配列として納してくれるのだ。

このためmultipartとして1000を超える要素を送っても、PHPで処理をしようとするときにはすでに1000要素まで切り詰められたものしか処理できないということになる。

回避策としては普通にPOSTするのではなくストリームとして処理するようにする必要があるようである。 うーむ。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?