12 月 17
FLASHのload関数で直接読み込めないファイル(異なるドメインのXMLファイル等)は、PHP等のサーバー側スクリプト言語を利用することでFLASHに読み込ませることができる。PHPを使う場合の手順は以下の通り(具体的なソース等はこちらを参照)。
- FLASHからPHPへ。SendAndLoad関数等を用いてPHPへ読み込みたいファイルのURLを送信する。
- PHP内部処理。PHPのreadfile関数等で指定されたファイルを読み込む。
- PHPからFLASHへ。読み込んだファイル内容(標準出力)をFLASHのSendAndLoad関数の返り値に送り返す。
- FLASH内部。SendAndLoad関数の返り値を受け取って続きの処理へ。
しかし、FLASHの日本語文字コードはShift-JISとUTF-8にしか対応していないので(FLASH ActionScript辞典より。ちなみにクソ本)、EUC-JPで記述されたブログ(FC2等)のXMLファイルをPHPでそのまま読み込んでFLASHに送り返すと文字化けしてしまう。そこでPHPで読み込んだファイル内容を文字コードを変換してからFLASHに送り返す必要がある。以下はPHPからFLASHへUTF-8にエンコーディングしてから送るためのPHP内部の処理。
<?php
//readfile関数の内容を標準出力せずに内部バッファに保存させる
ob_start();
//FLASHから送信されたURL先のファイル内容を読み込む(標準出力されない)
readfile($_POST['url_from_flash']);
//内部バッファに保存された内容を変数に格納する
$str = ob_get_contents();
//内部バッファの開放
ob_end_clean();
//上記で変数に格納された内容がEUC-JP, Shift-JIS, UTF-8の場合、UTF-8に再エンコーディング
echo mb_convert_encoding($str,'UTF-8', 'EUC-JP,Shift_JIS,UTF-8');
//UTF-8にエンコーディングされた内容を標準出力(出力内容がFLASHへ送信される)
echo $str;
?>
追記(2007/12/17): なんかコードがダメ出しされてる。ただ肝心な部分のフィードバックがないので何がダメなのかわからず終い。
追記(2007/12/19): 先方で詳細コメント・解説をもらえた。単独では知り得なかった現在の状況が把握できたので有益なTB。
Related posts:
12 月 17th, 2007 at 1:55 PM
[PHP] まだまだ生産されるセキュリティホール
http://blog.boreal-kiss.com/2007/12/17113928.html いい情報っすね!!ってサンプル見てみると <…
12 月 17th, 2007 at 6:04 PM
$_POST[’url_from_flash’]
には、’../../../../etc/passwd’とか入れられるので、そのサーバにどのユーザーが居るかの情報も抜かれたりしますよって話だったりします。
あと、$_POST[’url_from_flash’]には、http://…..を想定されていると思いますが、それを許可すると他のサーバへの攻撃経路にされますよっていう話でもあったり。
なので、
readfile($_POST[’url_from_flash’]);
ってやらないで、せめて
readfile(dirname(__FILE__).preg_replace(”/(\0|\.)/”,”",$_POST[’url_from_flash’]));
くらいはやった方がいいです。
$_POST[’url_from_flash’]
には、英数半角文字しか来させないとかチェックしましょうという、セキュリティの一番基礎的な部分の突っ込みです。
************
itohさん>>
フォローありがとうございます。踏み台にされる原理が今イチわかっていないのですが、”http://”では第三者に迷惑がかかる可能性があるわけですね。
Boreal Kiss (管理人)
12 月 19th, 2007 at 6:46 AM
[PHP][Security] 補足
http://blog.boreal-kiss.com/2007/12/17113928.html http://d.hatena.ne.jp/elf/...