FuelPHPによるMVCプログラミング入門

フォームの安全性を高める

全333コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
入力フォームは、ハッキングツールなどを利用することで不正な値を送り込まれる危険性などがあります。FuelPHPには、これを防ぐ CSRFといった対処が簡単に行えますので、実装してみましょう。
講師:
07:50

字幕

ここでは、「フォームの安全性を高める」としまして、今、画面に表示されているような「お問い合わせ」フォームなどを作る時にその安全性を高める方法というのをご紹介していきたいと思います。今、この画面に表示されている「お問い合わせ」フォームの場合、名前とメールアドレスを記入すると、この様に確認画面に移動するようになっています。しかし、安全性を高めるために、一度、ブラウザを終了し、例えば直接、今の確認画面を呼び出そうとすると、この様に、セッションに内容が記録されていないということで、強制的に入力画面に移動するようにしています。しかし、安全性としては、これだけでは十分とは言えず、専用の、いわゆるハッキングツールなどを利用することで、フォームに不正な値を送信して、様々な障害を起こしたりすることがありえます。そこで、安全性を高める手段として、CSRF というような手段があるんですが、FuelPHP を使えば、非常に簡単に使うことができますので、是非、実装してみましょう。まず、ファイルの構成をご紹介します。ここでは lesson05-08 としまして、FuelPHP をセットアップしています。fuel フォルダの app フォルダのclasses 、 controller の中にはcontact.php というファイルがあり、この様に、入力画面であるaction_index とそれから、その入力のチェック画面であるaction_check というアクションが定義されています。 それぞれは様々なルールを定義して入力チェックをしたり、次の確認画面に移動するためにセッションに記録したり、といったようなことが書かれています。続いて、ビューを見ていきましょう。それぞれ、action_index は indexそれから action_check は check というビューファイルを利用しています。ビューファイルはこちら、views の contact というフォルダの中に入っていて、それぞれ index が入力画面の制作、そして check が確認画面の制作を行なっています。では、こちらにスクリプトを組み込んでいきましょう。まず、ビューの index.php の方にそのスクリプトを組み込んでいきます。ここでは、こちら 27 行目の所に「送信する」ボタンがありますが、このすぐ下の所にスクリプトを1つ追加します。print としまして、 Form オブジェクトのhidden というメソッドを使って、いわゆる hidden コントロールと言うものを作ります。後ほど、HTML のタグを見ながら改めて、紹介していきましょう。ここでは、そのコントロールの名前として、Config::get で、security.csrf_token_key というものを設定します。 そして同じくSecurity:: fetch_tokenというものを利用していきます。これでビューが出来上がりましたので、入力画面を見ていきましょう。MAMP の「環境設定」のドキュメントルートがlesson05-08/public になっていることを確認したら、フォームを表示します。一見すると、表示には変化が無いように見えますが、HTML のソースを確認すると、違いが分かります。「送信する」ボタンの後ろを見ていきますと、この様な input というものが追加されています。詳しく見ていきましょう。まず、ここで input のname として定義されているのが、fuel_csrf_token とあります。これは、先ほど書いたこちらのメソッドの中で、Config::get ということで、security_csrf_token_key というものが指定されています。こちらは、実は、fuel の app のconfig の中の config.php の112 行目付近に記載されているcsrf_token_key というこの設定を読み込んでいます。名前としては fuel_csrf_tokenという風になっているんですが、ここは自由に変更することができます。 例えば、 sec_token などとすれば、こちら、出力される方も、この様に sec_token となります。この様に、名前を変更することで、より安全性を高めて、FuelPHP を使っていることが分らないようにという様な隠ぺいもできます。ここのコンフィグの名前を使うメリットとしては、次の確認画面の方でこの名前を使って、一致しているかどうかを確認する必要があるんですが、スクリプトの中に直接、名前を書き込んでしまうよりも、この様に一括で、ある場所で定義をしていた方が間違いが少なくなるため、このコンフィグの csrf_token_key という設定を使っているというわけです。そして、この name 属性が指定されているもののバリューとしては、この様な、今生成されたキーが出力されます。このキーは Security オブジェクトのfetch_token メソッドで出力されるもので、再読み込みをすると、先ほどと、この様に値が変わります。例えば、ここでは b55 となっていますが、再読み込みをすると、末尾3文字が 537 ということで、全く違うキーになります。これは、この画面を表示する人や時間帯などによって刻々と変化していきますので、2つとして同じキーは存在しない。 そして、この法則性もありませんので、予測することができないという非常に安全性の高いキーになります。このコントロールですが、画面を見ても何も見えません。これは、type 属性がhidden となっているためで、これを hidden コントロールと言い、私たちの目には見えないかたちでフォームとして送信することができるというコントロールです。これは Form オブジェクトのhidden メソッドを使って出力することができます。これで、この csrf_token というものの出力までが完成しました。では続いて、このチェックを行ってみましょう。チェックは contact.php のaction_index のアクションで行います。ここでは、validation のrun として、各入力項目が正しいかどうかだけのチェックを行なっていますが、ここでもう1つ、その token のチェックを入れていきます。ここでは && としまして、Security オブジェクトのcheck_token というメソッドを呼び出します。これでバリデーションが正しく通過しcheck_token も通過した場合にだけ、check 画面に移動するという様なことが可能になります。 これで、ハッキングツールなどを利用して不正な値を送られることを防いで、このフォームから値を入力した時にだけ次のチェック画面に移動するという様なことができ、安全性を高めることができます。入力フォームを実装する時には是非、仕込んでおきましょう。

FuelPHPによるMVCプログラミング入門

このコースでは、PHPのフレームワークのひとつであるFuelPHPを紹介していきます。フレームワークとはスクリプト開発における「足場」となるもので、近年のスクリプト開発においては非常に一般的な存在となっています。高速な開発スタイルをぜひとも身に付けていきましょう。

6時間19分 (47 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 3,990
発売日:2014年01月12日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。