6
絶対的なローカルファイルの包含に脆弱なおもちゃPHPアプリケーションを想像してみてください。インクルード( 'php:// input')が機能しないのはなぜですか?
<?php include($_GET['action']);
私はそれを悪用するには、次の要求を試してみました:
POST /?action=php://input HTTP/1.1
Host: XXXXXXXXXXXXXXXXX
Content-Length: 3
foo
これが効果的にリクエストボディfoo
でinclude('php://input');
を実行し、私はそれがfoo
を印刷することを期待します。しかし、私は次のエラーが発生します
<br />
<b>Warning</b>: include(php://input): failed to open stream: operation failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
<br />
<b>Warning</b>: include(): Failed opening 'php://input' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br />
ここで問題は何ですか?これはPHPのセキュリティ機能ですか?もしそうなら、誰かがこれを緩和するPHPソースコードの責任ある部分を指し示すことができますか?
何に関するカスタムストリーム? 'stream_wrapper_register'とそのすべてのジャズを使用していますか? – Halcyon
設定でこのオプションの値を確認してください。http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek
@Halcyon私は聞いています。現代のLAMPセットアップで、これが悪用可能であることが判明したのは、ファイル書き込みプリミティブ(セッション開始()やアプリケーション固有のロギングなど)がある場合を除いてです。 –