Upgrade to Pro — share decks privately, control downloads, hide ads and more …

昔の) PHP が誇った最高の機能 register_globals の真実、そして未来へ

昔の) PHP が誇った最高の機能 register_globals の真実、そして未来へ

Wataru MIYAGUNI

August 21, 2015
Tweet

More Decks by Wataru MIYAGUNI

Other Decks in Technology

Transcript

  1. register globals とは register globals を on とした場合、この機能 により、HTML フォームから投稿される

    変数と同時に、あらゆる種類の変数がス クリプトに注入されることになります。 これは、PHP においては変数の初期化が 不要であるということにも関係し、 安全 でないコードを書くことが極めて容易に なるということを意味します。 See: PHP: グローバル変数の登録機能の使用法 - Manual
  2. register globals とは register globals を on とした場合、この機能 により、HTML フォームから投稿される

    変数と同時に、あらゆる種類の変数がス クリプトに注入されることになります。 これは、PHP においては変数の初期化が 不要であるということにも関係し、 安全 でないコードを書くことが極めて容易に なるということを意味します。 See: PHP: グローバル変数の登録機能の使用法 - Manual
  3. おまけ register globals が on の状態で $ FILES に対して extract()

    を実行して EXTR SKIP を指定すると、 その結果に驚くことでしょう 。 See: PHP: extract - Manual  
  4. おまけ register globals が on の状態で $ FILES に対して extract()

    を実行して EXTR SKIP を指定すると、 その結果に驚くことでしょう 。 See: PHP: extract - Manual  
  5. おまけ register globals が on の状態で $ FILES に対して extract()

    を実行して EXTR SKIP を指定すると、 その結果に驚くことでしょう 。 See: PHP: extract - Manual ちゃんと書け
  6. $ SESSION も対象です EGPCS(Environment, GET, POST, Cookie, Server) 変数を グローバル変数として登録するかどうかを

    指定します。 See: PHP: register globals - Manual Session とは一言も書いてない けど Session も対象です
  7. $ SESSIONS まとめ ˆ リファレンス渡しされるので注意な ˆ session_start() のタイミングでグ ローバル変数にアサインされるので、 同キー名があれば

    (たぶん) EGPCS よ りも強い(上書きする) ˆ 余談ですが EGPCS の順番は variables order の設定で 決まる See: http://gongo.hatenablog.com/entry/2014/12/24/132841
  8. そんなわけで ˆ register globals の仕様を深く知ること ができました ˆ もし PHP 5.3

    → 5.4 を挑戦している方 は、グローバル変数と引き続きがん ばってください
  9. Usage (with magic quotes gpc) <?php $request = new Gongo\MercifulPolluter\Request;

    $request->enableMagicQuotesGpc(); $request->pollute(); // ...
  10. まとめのまとめ ˆ はやく PHP 5.4 以上にしよう ˆ 脆弱性残ったままなので危険です ˆ merciful

    polluter 使わない未来にしていこう ˆ スーパーグローバル変数汚染は防いでいるものの、そ れ以外は通常の仕様のままなのでやはり危険です ˆ PHP 7 に register globals を持っていかないよ うに ˆ 7 に相応しくない  
  11. まとめのまとめ ˆ はやく PHP 5.4 以上にしよう ˆ 脆弱性残ったままなので危険です ˆ merciful

    polluter 使わない未来にしていこう ˆ スーパーグローバル変数汚染は防いでいるものの、そ れ以外は通常の仕様のままなのでやはり危険です ˆ PHP 7 に register globals を持っていかないよ うに ˆ 7 に相応しくない no register globals, now PHP