5
5

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.

HTTP PHPのGETパラメーターの長さが512文字より大きいと消える

Last updated at Posted at 2017-04-03

概要

PHPの
$_SERVER["REQUEST_URI"]
には
/path/file?one= ~ そこそこ長い ~ &two=hogehoge
["QUERY_STRING"]にもone= ~ そこそこ長い ~ &two=hogehoge

と格納されているのに、
$_GETには["two"]しかない!という現象が起きた。

そう言えばGETにはリクエストの長さ制限があったなあーと初心に返ったのだが…
問題はブラウザやApacheではなかった。

結論

; suhosin.get.max_value_length
; ----------------------------
; * Type: Integer
; * Default: 512
;
; Defines the maximum length of a variable that is registered through the URL.
;
;suhosin.get.max_value_length = 512
;

おそらく守護神が主犯。
セキュリティの宿命ですが、Composer止められたり、いい思い出が無いぞ。


受け手のライブラリ、Apache、ブラウザ、HTTP、エンコード、圧縮、PHP、特殊文字などいろいろ思い浮かんで難しいぞ。

調査方法

  1. 「GET パラメーター 長さ」などでググる。
    ブラウザ、Apacheなどのよく遭遇しそうなのが出る。
  2. Apacheの長さ制限(LimitRequestLine)はデフォルトでも手動で設定しても問題無い長さなのに解消しない。
  3. パラメーターの文字列を短くし、問題の解消を確認。
  4. 一文字ずつ追加し、消える直前のlengthを測る→512。
  5. 「get param 512」などでググる。
  6. suhosinっぽいよ。
  7. suhosinオフにしたら解消したよ。(apacheのrestartを忘れずに)

参考

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?