CGI.pm

スポンサーリンク

概要

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

コメント

タイトルとURLをコピーしました