CGI.pm

最終更新日時:2015-09-04 00:00:00
Perl

概要


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
根本的な解決にはまったくなっていないことに注意してください(^_^;

お問い合わせは 掲示板 にて。