概要
CGI.pm
は Perl
でCGIを作成する際に使用する定番のモジュールです。
機能はたくさんあるので、簡単な使い方だけを紹介。
use CGI; my $cgi = CGI->new; my $cookie = ... my $header = { -charset => 'UTF-8', -pragma => 'no-cache', 'Cache-Control' => 'no-cache', cookie => $cookie->as_string, }; print $cgi->header( $header ); print ...
HTMLエスケープ
escapeHTML
を使うと、文字列をHTMLエスケープしたものを取得できます。
ただし、CGI.pm
のデフォルトの文字コードは ISO-8859-1
なので、日本語に対して使用する場合には明示的にキャラクターセットを指定する必要があります。
$cgi->charset('utf-8'); my escape_html = $cgi->escapeHTML($html);
CGI::param() で warning
どのバージョンで仕様が変わったのか不明ですが、どこかのタイミングで param()
の仕様が変わったようです。
新しいバージョンの CGI.pm
に移行した際に以下のような warning が出ることがあります。
CGI::param called in list context from xxx line xxx, this can lead to vulnerabilities. See the warning in "Fetching the value or values of a single named parameter" at xxx line xxx
詳細はよく分からないのですが、どうやらリスト内で param()
を使うとなんらかの脆弱性がある模様。
対応しなくてはいけないのかよく分からないのですが、とりあえず動かないと困る!
そして大量に warning が出ても邪魔なだけ、、、、、という場合には、
$CGI::LIST_CONTEXT_WARN = 0;
これで抑止出来ますw
ただし、根本的な解決にはまったくなっていないことに注意してください(^_^;
コメント