FuelPHP で作成したアプリ「コンタクトフォーム」のソースを公開してみる

FuelPHPでわりと真面目に遊ぶ の真似をして、作成中のアプリ「コンタクトフォーム」のソースコードを以下で公開します。

このアプリは、FuelPHP でセキュアな実用的なアプリを作成するためのサンプルを目指して作成しています。もし、セキュリティホール、バグを発見された方がいましたら、是非、お知らせください。また、このようにコーディングした方がよいという、よりよいコードなども歓迎いたします。

機能的には、『CodeIgniter 徹底入門』にある「コンタクトフォーム」と同じような機能を実装しており、実装方法もだいたい同じようにしてあります。完全なポートではありませんが。

  • セッション、データベースは使っていません。
  • CSRF 保護にクッキーは使っています。
  • 「入力ページ→確認ページ→送信完了ページ」というページ構成です。
  • 送信された内容は、管理者にメールで届きます。

変更履歴

2013/05/01

AppFog での rackspace がなくなるので、稼働サンプルの URL を http://kenjis.rs.af.cm/ から http://kenjis-fuel.ap01.aws.af.cm/ に変更しました。

2012/11/19

FuelPHP 1.4 ベースにアップデートしました。

稼働サンプルの URL を http://kenjis.phpfogapp.com/ から http://kenjis.rs.af.cm/ に変更しました。

2012/07/27

FuelPHP 1.2.1 ベースにアップデートしました。

独自に拡張していた部分はほとんどが Core に取り込まれていますので、コードを削除しました。ついでにバリデーションを少々いじりました。config.php の設定ミスを修正しました。

2012/07/03

このアプリのコードは少々古くなっています。FuelPHP 1.2 対応の最新の「コンタクトフォーム」のサンプルとその詳細な解説を電子書籍 『はじめてのフレームワークとしての FuelPHP』 に記載しています。よろしければ、そちらをご覧ください。

2012/02/05

Core クラスの置き換えを止めました。

ただし、Form クラスの修正のための MyForm クラスは現在使用されるようには修正されていません。現状のコードは Form クラスを直接生成しておらず、MyForm を使うようにするのは難しいためです。

その後の調査の結果、Core のアップデートに伴い、Form::prep_value() は Form_Instance::prep_value() に移動されており、置き換えたつもりだった Form::prep_value() は、Core をアップデートした時点ですでに使われなくなっていました。Core を変更するとこういうリスクがありますね。

2012/01/30

使用している FuelPHP をアップデートしました。FuelPHP 1.1 ではもうこのサンプルは動作しません。

ソースコードGitHub で公開しました。

Fieledset クラスを使っていない初期バージョンは v1.0 とタグ付けしました。

v1.0 は FuelPHP らしくないコードでしたので、Fieldset クラスを使うように書き直しました。Fieldset クラスについては以下の記事を参照願います。

2011/12/21

ラジオボタン、セレクトメニュー、チェックボックスの処理で、ビュー内に Input::post を書いていることに気がつきました。これは、ユーザ入力を検証なしでビューで使うことになりますので、こういうコーディングはよくないですね。ただし、今回はこれらのユーザ入力を表示はしませんので脆弱性になる可能性はありません。後で修正します。
入力エラーの表示の場合、結局、検証されていない値を表示することになります。Form クラスのメソッドでの Input::post の使用は、Form クラスが HTML エスケープしてくれるため XSS にはなりませんので、そのような使用はとくに問題ないかなと思い直しました。また、このサンプルでは文字コードのチェックやコントロールコードがないことは、input_filter でチェックしています。