2016-02-22 19 views
6

絶対的なローカルファイルの包含に脆弱なおもちゃPHPアプリケーションを想像してみてください。インクルード( 'php:// input')が機能しないのはなぜですか?

<?php include($_GET['action']); 

私はそれを悪用するには、次の要求を試してみました:

POST /?action=php://input HTTP/1.1 
Host: XXXXXXXXXXXXXXXXX 
Content-Length: 3 

foo 

これが効果的にリクエストボディfooinclude('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ソースコードの責任ある部分を指し示すことができますか?

+0

何に関するカスタムストリーム? 'stream_wrapper_register'とそのすべてのジャズを使用していますか? – Halcyon

+2

設定でこのオプションの値を確認してください。http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek

+0

@Halcyon私は聞いています。現代のLAMPセットアップで、これが悪用可能であることが判明したのは、ファイル書き込みプリミティブ(セッション開始()やアプリケーション固有のロギングなど)がある場合を除いてです。 –

答えて

2

私はGustekの助けを借りて答えを見つけました。

はallow_url_includeによって制限さ

:PHP://入力、PHP:// STDIN、php:// memoryおよびphp://のみ一時たとえばphp://filterのためにそうではないどうやらphp://inputallow_url_includeのrestrctionに該当。

出典:Docs for php:// URL handler

関連する問題