コントローラーとビュー (7/7)
作成:2010-02-17 14:29
更新:2010-05-10 19:09
更新:2010-05-10 19:09
■フォーム内容の取得とサニタイズ
今回、resultメソッドで行っている処理は、大きく分けると2つの要素にわけて考えることができます。それは、「フォーム内容の取得」と「データのサニタイズ」です。
注意したいのは、これは「POST送信」の場合のみである、という点です。GETで送信した場合は、これでは取得できません。この場合は、$this->params['url']内にまとめられます。この違いをよく理解しておきましょう。
このサニタイズは、PHPに用意されている関数などを使っても行えますが、CakePHPに用意されているライブラリを使って行うこともできるので、こちらを使うことにしましょう。用意されているライブラリは、「sanitize」というものです。ライブラリを利用するためには、まず、
このようにして行います。これで、引数の値をサニタイズしたものが$変数に収められます。こうして無効化した値を、$this->setでビューに渡して表示すれば、問題が起こることもありません。
○フォーム内容の取得○
送信されたフォームは、$this->paramsというものから取り出しています。POSTで送信されたフォームの内容は、$this->params['form']というところに、フォームの各項目名で値が保管されています。今回は、<input type="text" name="input" />というタグが書かれていましたから、$this->params['form']['input']で値を取り出すことができた、というわけです。注意したいのは、これは「POST送信」の場合のみである、という点です。GETで送信した場合は、これでは取得できません。この場合は、$this->params['url']内にまとめられます。この違いをよく理解しておきましょう。
○テキストのサニタイズ○
取り出された値は、送信されたテキストそのままです。これを画面に表示させる場合、必要となるのが「サニタイズ」という処理です。これは、テキスト内にスクリプトなどが含まれていた場合、これを無効化するための処理です。送信されたテキストを画面に表示するような場合、これを忘れるとスクリプトを使った攻撃を受ける可能性があります。このサニタイズは、PHPに用意されている関数などを使っても行えますが、CakePHPに用意されているライブラリを使って行うこともできるので、こちらを使うことにしましょう。用意されているライブラリは、「sanitize」というものです。ライブラリを利用するためには、まず、
App::import( ライブラリ );というものを実行します。これにより、指定のライブラリがロードされ使える状態になります。サニタイズ処理の実行は、
$変数 = Sanitize::stripAll( 値 );
このようにして行います。これで、引数の値をサニタイズしたものが$変数に収められます。こうして無効化した値を、$this->setでビューに渡して表示すれば、問題が起こることもありません。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※フォームの取得 $input = $this->params['form']['input']; ※ライブラリのロード App::import("sanitize"); ※テキストのサニタイズ $result = Sanitize::stripAll($input);
※関連コンテンツ
「初心者のためのCakePHP 1.3 プログラミング入門」に戻る