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のreadfileでプロキシ」にコメントを書く
- 前(古い): 2009年4月21日(Tuesday)のえび日記
- 次(新しい): 2009年4月23日(Thursday)のえび日記