ホーム > CakePHP > CakePHPでオレ専用ブログを作ってみる vol.3

CakePHPでオレ専用ブログを作ってみる vol.3

投稿内容を検証する(サニタイズとヴァリデーション)

まずは投稿されるデータの内容にJavaScriptとかHTMLタグとかがあって、これが機能してしまって不具合というか、よろしくないことが発生してはいけないので、そういう「効かれると好ましくない」タグを無害化(サニタイズ)することにする。

本当はコントローラかモデル側で処理(Sanitize)したかったんだけど、コントローラでやろうとしたら、記事一覧ではSanitizeできてるんだけど、記事本体にとぶとそうなってなかったり(addアクションではやれたのに、viewアクションで同じように出来ず)してうまく処理できなかったので、結局ユーザ側に出力する段階(ビューファイル)のほうで実装した。(エントリ記事一覧ページの/app/views/entries/index.ctpとエントリ本体の/app/views/entries/view.ctp)

とりあえず「clean」を使ったけど、エントリ本体ページのコンテンツ内では、imgタグとaタグは利用できるように変更したいと思うちょります。(オレ個人で利用するので、よく使いそうな外部へのリンクやFlickr等の外部サイトからの画像の読み込みは可能にしておきたい)
clean :: データのサニタイズ(Data Sanitization) :: CakePHPによる作業の定石 :: マニュアル :: 1.2 Collection :: The Cookbook

▼app/views/entries/index.ctp

ブログエントリ一覧

"; echo "
  • ".Sanitize::clean($arr['Entry']['category'])."
  • "; echo "
  • ".$html->link($arr['Entry']['title'], '/entries/view/' . $arr['Entry']['id']) . "
  • "; echo "
  • ".Sanitize::clean(mb_substr($arr['Entry']['content'], 0, 100)."……")."
  • ";i> echo "
  • " . $arr['Entry']['created'] . "
  • "; echo " "; }

    ▼app/views/entries/view.ctp

    
    

    オレ専用ブログHomeへ

    投稿日時:

    とりあえずこれでいいかなと思ったら、改行コードも強制的に「¥n」に変換されちゃうから、nl2br(改行コードを
    タグに変換する)関数が使えなくなってしまうということに気がついてしまった。

    サニタイズというのも、自分が思うようにやろうとするのはなかなか大変なんだと、こうやって自身で実践してみて初めて実感できるもんだなぁ。

    エントリ本体でのcontentsでは具体的にサニタイズするタグを決めてやったほうがいいのか(これならnl2br使えるだろう)、それともサニタイズ処理の後で「¥n」を改行タグに置き換えるような処理を、例えば正規表現とかでやったほうがいいのかな。

    んー、、今日もそんなに進まなかったけどリアルに色々学んだ気がする。なるほどなるほど。

    オープンソース徹底活用 CakePHPによるWebアプリケーション開発
    掌田 津耶乃
    秀和システム
    売り上げランキング: 174026
    おすすめ度の平均: 5.0

    5 初心者向け
    5 深く書かれていて便利である

    コメント:0

    コメントフォーム
    入力した情報を記憶する

    トラックバック:0

    この記事のトラックバック URL
    http://showzine.info/blog/2009/08/cakephp%e3%81%a7%e3%82%aa%e3%83%ac%e5%b0%82%e7%94%a8%e3%83%96%e3%83%ad%e3%82%b0%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b-vol-%ef%bc%93.html/trackback
    トラックバックの送信元リスト
    CakePHPでオレ専用ブログを作ってみる vol.3 - SHOWJIN*BLOG より

    ホーム > CakePHP > CakePHPでオレ専用ブログを作ってみる vol.3

    検索
    フィード

    ページの上部に戻る