掲示板などの書き込みができるCGIで、HTMLタグを投稿されたら、デザインがおかしくなる、もしくは、スクリプトを埋め込まれてセキュリティーが、やばいことになるという問題をが起きないようにします。(自分用メモ)

◆CGI.pmを使いHTMLエスケープする場合は、
$htmlに目的のテキストデータを入れて、
#インスタンスを作らない場合
use CGI;
print CGI::escapeHTML($html);
#インスタンスを作る場合
use CGI;
$q = new CGI;#クラスのインスタンスを生成
$html=$q->escapeHTML($html);#HTMLエスケープ
でいけるようです。

正規表現を使ってHTMLタグを取り除く処理をするには、
 $text に目的のテキストデータを入れて、
$text =~ s/<.*?>//g; #HTMLタグを取り除く場合
こんな感じです。これで安全ですが、もとに戻すことはできません。

URI::Escapeを使うやり方
use URI::Escape;
$unescaped = uri_unescape( $escaped ); #URLエンコード済み文字列のデコード
$escaped = uri_escape( $unescaped ); #URLエンコード済み文字列へのエンコード

エスケープは HTML::Entitiesモジュールを使うと便利だそうです。


自前のエスケープ関数を用意するとこんな感じになるようです。
Perl/特殊文字のエスケープ - Take's Wikiより引用
sub escape{
	my($strptr) = @_;
my($tmp);

$tmp = ${$strptr};

$tmp =~ s/\r\n|\n\r/\n/g;
$tmp =~ s/\r/\n/g;
$tmp =~ s/\&/&amp;/g;
$tmp =~ s/\</&lt;/g;
$tmp =~ s/\>/&gt;/g;
$tmp =~ s/\"/&quot;/g;
$tmp =~ s/\'/&apos;/g;

${$strptr} = $tmp;
}


初めてのPerl 第5版
初めてのPerl 第5版Randal L. Schwartz Tom Phoenix brian d foy 近藤 嘉雪
オライリージャパン 2009-10-26
売り上げランキング : 68148
続・初めてのPerl 改訂版 新版Perl言語プログラミングレッスン入門編 すぐわかるPerl (Software Technology) モダンPerl入門 (CodeZine BOOKS) 起業のファイナンス ベンチャーにとって一番大切なこと
Amazonで詳しく見る

sponsered link




sponsered link

posted by やすボーイ@成功コンサルタント at 2010年11月14日 17:31 | Comment(2) | TrackBack(0) | プログラミング関係
この記事へのコメント
エスケープは HTML::Entitiesモジュールを使うと便利です。指定した文字だけのエスケープが可能です。独自のマッピングも追加できます。

独自に書いてしまうと抜けがあるかもしれない
のでモジュールを使った方がよいかと思います。
Posted by syohex at 2010年11月15日 09:40
情報ありがとうございます(^^)
モジュール使ってみます。
Posted by やす@管理人 at 2010年11月18日 17:20
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/169379002
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
最近の記事
カテゴリ
サイト内検索です^^
カスタム検索
with Ajax Amazon