水無月ばけらのえび日記

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

最近の日記

関わった本など

インクルーシブHTML+CSS & JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターンデザイニングWebアクセシビリティ - アクセシブルな設計やコンテンツ制作のアプローチコーディングWebアクセシビリティ - WAI-ARIAで実現するマルチデバイス環境のWebアプリケーション体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践ウェブの仕事力が上がる標準ガイドブック 5 WebプログラミングWeb Site Expert #13Dreamweaver プロフェッショナル・スタイル [CS3対応] (Style for professional)

その他サイト