Kenji Suzuki
kenji****@gmail*****
2011年 6月 23日 (木) 17:02:09 JST
Kenji です。 On Wed, 22 Jun 2011 12:23:30 +0900 石川 雅臣 <bispa****@hotma*****> wrote: > はじめまして > PHP/CIの初心者です。 > 初歩的な質問なのですが、ご回答いただけると幸いです。 > > 先日、鈴木様のブログ > CodeIgniterのXSS対策はどうあるべきか?その2 > http://d.hatena.ne.jp/Kenji_s/20110621/1308632827 > > にて拙い質問をさせていただいた者です。 > 「CodeIgniter徹底入門」を読みながら独学をしているのですが、 > > 101ページ〜 > 【4.3.4】レイアウト機能を持たせたビュー > の章で、 > > 【コントローラーファイル】 > function index() > { > $data['title'] = 'サンプル'; > $data['contents'] = 'CodeIgniterのサンプルです。'; > $data['header'] = $this->load->view('parts/header', $data, TRUE); > $data['main'] = $this->load->view('parts/main', $data, TRUE); > $data['footer'] = $this->load->view('parts/footer', '', TRUE); > $this->load->view('layout', $data); > } > > 【layout.php】 > <?=$header?> > <?=$main?> > <?=$footer?> > ------------------------------------------------------------- > #header.php / main.php / footer.php 省略 > > のようにありまが、鈴木様のブログのコメント欄にて > 原則として「すべての変数に対してエスケープ処理などを施す」 > とのご指導を頂きました。 > 上記のようなコードはあくまで学習用で、 > 本番環境では避けるべきとの理解でよろしいでしょうか? ビューを分割してインクルードすることは、本番環境でもありうると思います。 この場合、二重にエスケープ処理などはしてはいけないので、インクルードする 方のビューは処理しないとするしかないと思います。 layout.php は、分割されたビューファイルを出力しているだけなので、分割 されているパーツをすべてきちんと処理しておけば、全体として処理漏れは ありません。 例外的な扱いになってしまいますが、このようなケースも実際にアプリを作って いくと、どうしても出てくるようにも思います。場合によりエスケープせずに 出力させる場合も生じると思います。 エスケープしないでよいということが即座に判断できればいいので、コーディング 規約としてそのように対応することを共有できればいいのではないでしょうか。 // Kenji