アーカイブ
Tyzohブログ - ikarashiさんのエントリ
 ikarashiさんのエントリ配信

2007/06/26
[Secure-SBM:016] View セキュアフィルタ

執筆者: ikarashi (5:20 am)
こんにちは,五十嵐です.ブックマーク登録の続きを書くつもりでしたが,プログラムが多くなる前にクロスサイトスクリプティング (XSS) 対策をやっておきます.View::TT のフィルタの機能を使って, < や > などを "&lt;" や "&gt;" と出力するようにします.入力されたデータにスクリプトなどが含まれている場合の対策です.

フィルタの詳しい説明は 「Template::Manual::Filters - Standard filters」 に書かれています.もっとも必要と思われるのは "html" フィルタです.
引用:
Converts the characters '<', '>', '&' and '"' to '&lt;', '&gt;', '&amp;', and '&quot;' respectively, protecting them from being interpreted as representing HTML tags or entities.

これで,一応,XSS 対策がとれます.html_entity というフィルタもありますが,これを使うと日本語もすべてコードに変換されてしまいます.試してみましたが,decode 処理が必要になりますので,html フィルタを使うことにしました.entity については W3C の 「24 Character entity references in HTML 4」 を参照するとよいでしょう.

全ては書きませんが,データベースからの output を次のように変更します.
root/template/admin/listroles_center.tt
@@ -70,7 +70,7 @@
 <tr><td><button id="editrole_button[% role_v.role_id  %]">
        編集</button></td>
        <td><button id="deleterole_button[% role_v.role_id %]">
         削除</button></td>
        <td align="right">[% role_v.role_id %]</td>
-       <td>[% role_v.role_name %]</td>
+       <td>[% role_v.role_name | html %]</td>
 </tr>
 
 <tr>
ポイントは,データベースからの出力部分に,"html" というフィルタをかけていることです.これをおこなう前は,スクリプトがそのまま出力されてしまいましたが,これによってスクリプトの実行などを抑えることができます.しかし一方で,出力それぞれに perl のフィルタが呼ばれるので,実行速度が遅くなるという欠点があります.

2007/03/26,27 記

注: ブログの内容は,開発途中で記述しているため,現在の実装とは異なる場合があります.

参考:

Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
ikarashiさんのブログを読む | コメント (0) | トラックバック数 (0) | 閲覧数 (3347)
Trackback is not accepted now.
印刷用ページ 友達に送る
 
投稿された内容の著作権はコメントの投稿者に帰属します。
サイト内検索
ブログ カレンダー
«  «  2008 3月  »  »
24 25 26 27 28 29 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5