水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > PHPのreadfileでプロキシ

PHPのreadfileでプロキシ

2009年4月22日(水曜日)

PHPのreadfileでプロキシ

公開: 2009年4月26日20時15分頃

Flash関連で、「してやられました。クロスドメイン上の画像、Bitmap.drawのトラップ!! (d.hatena.ne.jp)」というお話があったのですが、プロキシとして動作するPHPのサンプルコードにびっくり。コードの元ネタは「Flex2でCoverFlowクローンを作る (4) ~鏡面加工する (my.opera.com)」に出ているもののようですが、ともあれこんなコードです。

<?php

if($_GET["file"]){

header("Content-Type:image/jpeg;");

readfile($_GET["file"]);

}

?>

こんな簡単なコードで動くなんて、PHPは凄いなぁと思います。readfile() はファイルを読んでそのまま出力するものですが、http://…… で始まる URL を渡すと、そのURLからファイルを取ってきて読んでくれるのですよね。これは便利。……なのですが、PHPのこの手の機能は悪用されやすいことも周知の通りで、PHP の設定でallow_url_fopenを無効にすることを推奨している人も多いようです。

興味深いことに、このコードの場合は攻撃パターンが逆なのですね。リモートファイルインクルードは「サーバ内のファイルを読むつもりが、URLを渡されたら外部のファイルを読んでしまった」となるのですが、このコードでは「外部のURLを読むつもりが、URLでないものを渡されたらサーバ内のファイルを読んでしまった」となります。

※まあ、あくまでサンプルコードとして掲げられているだけなので、これをそのまま使う人はいないと思うのですが。

りゅうさん (rryu.sakura.ne.jp)の説によると、元ネタは http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001950.html (livedocs.adobe.com) らしい。

関連する話題: セキュリティ / PHP

最近の日記

関わった本など