例えば文字列中にHTMLが含まれる場合、それをHTMLではなくタダの文字として表示したい場合がある。このような時にはHTMLの仕様で定められている文字実体参照などへ変換してやれば良い。
原理は非常にシンプルだ。単純に以下の文字列に置き換えてやれば良い。
変換前 | 変換後 |
---|---|
& | & |
< | < |
> | > |
" | " |
' | ' |
これを行うことで、タグ使用不可の掲示板が作成できたり、XSS(クロスサイトスクリプティング)対策にも活用できる。
サンプル
;# ;#HTML(タグ)を表示する、XSS対策を行いたい ;# #-------------------------------------------------# #HTML準備 #-------------------------------------------------# my $html = qq|<script language="JavaScript">alert('にょろ');</script>\n|; #-------------------------------------------------# #変換+表示 #-------------------------------------------------# #-- オリジナル関数 --# print xss($html); #-- CGIモジュールを利用 --# use CGI qw(:cgi); print CGI::escapeHTML($html); #-------------------------------------------------# #XSS対策 #-------------------------------------------------# sub xss { my $str = shift || return(undef); $str =~ s/&/&/g; $str =~ s/</</g; $str =~ s/>/>/g; $str =~ s/\"/"/g; $str =~ s/\'/'/g; return($str); }
実行結果
<script language="JavaScript">alert('にょろ');</script>
ここではオリジナルの関数とCGIモジュールの機能の両方を試してみたが、場合によって好きな方を使えば良い。結果はどちらも同じだ。