Standing on the Shoulder of Linus

Home / 2012 / 2月 / 03 / FuelPHP ファイルアップロード、ホワイトリストとブラックリスト

FuelPHP ファイルアップロード、ホワイトリストとブラックリスト

FuelPHP ファイルアップロードについて試してみました。公式マニュアルの Upload Class を見ると、ホワイトリストとブラックリストが用意されています。両方設定したらどうなるのか?を試してみました。

その前に、フォームの作成で引っかかりました。Form::open, Form::file を使ったのですが、enctype="multipart/formdata" を自分で指定する必要がありました。

Form::open(array('action' => 'submit', 'enctype' => 'multipart/formdata'));

のように記述する必要があります。

なお FuelPHP では、オブジェクト指向でフォームを作る Fieldset も用意されていますが、こちらの場合は set_config('form_attributes', array('enctype' => 'multipart/form-data')) を使うようです(公式フォーラムの Multipart form-data with Fieldsetsを参照)。

ホワイトリストとブラックリストの話に戻ります。許可不許可の設定は、Upload::process の引数として指定することができます。例えば、拡張子がjpg, jpeg, gif, pngのいずれか、であれば下のようになります。

$config = array(
    'ext_whitelist' => array('jpg', 'jpeg', 'gif', 'png'),
);
Upload::process($config);

指定しなかった場合は、config ディレクトリにある設定ファイルの指定が適用されます。

ext_whitelist と対になる設定項目 ext_blacklist もあります。

$config = array(
    'ext_blacklist' => array('pdf', 'docx'),
    'ext_whitelist' => array('jpg', 'jpeg', 'gif', 'png'),
);

のような場合、pdf や docx が許可されないのはもちろんですが、jpg, jpeg, gif, png 以外のものも許可されません。ext_blacklist, ext_whitelist の順序を入れ替えても同じでした。ホワイトリストが優先されるようです。 ブラックリストとホワイトリスト両方パスする必要があります。FuelPHP ホワイトリストとブラックリスト その2を参照。

今回は拡張子をとりあげましたが、公式マニュアルには mime type によるチェック方法も載っています。(アップロードを許可するユーザーの種別にもよりますが)拡張子よりこちらのほうが本来は良いでしょう。

※追記
CodeIgniter では、わざわざ指定した記憶が無いな、と思ってしらべてみたら、フォームヘルパーに form_open_multipart というのがありました。

関連

Posted in fuelphp | Tagged アップロード, セキュリティ
← NEWS テーマ日本語化ファイル FuelPHP ホワイトリストとブラックリスト その2 →

アーカイブ

人気の投稿とページ

  • キンドル本を印刷する(PDFに変換する)方法
  • 名古屋駅から国際センターまでの道のり(徒歩)
  • AGPL ライセンス(GPLとは似ているが違いもある)
  • 6年使ったイーモバイル(Y!mobile)を解約手続。店頭でSIM返却
  • JP-Secure SiteGuard WP Pluginは不正ログイン防止に役立つか

プロフィール

水野史土:月70万PVホームページ制作会社のレスキューワーク株式会社で、PHPソフトウェアのサポートを行っている。concrete5コミュニティリーダー、Novius OSコアコード貢献者でもある。 詳しくは管理者詳細参照。
大好評WordPress書籍「WordPressユーザーのためのPHP入門 はじめから、ていねいに。」サポートページ

Copyright © 2015 Standing on the Shoulder of Linus.