名前¶
CGI::Lite - WWWフォームとクッキーの処理およびデコードためのPerlモジュール
概要¶
use CGI::Lite;
$cgi = new CGI::Lite;
$cgi->set_platform ($platform);
$platformは以下のいずれかにすることができます(大文字、小文字は区別されません):
Unix, Windows, Windows95, DOS, NT, PC, Mac あるいは Macintosh
$cgi->set_file_type ('handle' or 'file');
$cgi->add_timestamp (0, 1 あるいは 2);
where 0 = タイムスタンプなし
1 = 全てのファイルにタイムスタンプ (デフォルト)
2 = ファイルが存在する場合にのみタイムスタンプ
$cgi->filter_filename (\&subroutine);
$size = $cgi->set_buffer_size ($some_buffer_size);
$status = $cgi->set_directory ('/some/dir');
$cgi->set_directory ('/some/dir') || die "Directory doesn't exist.\n";
$cgi->close_all_files;
$cgi->add_mime_type ('application/mac-binhex40');
$status = $cgi->remove_mime_type ('application/mac-binhex40');
@list = $cgi->get_mime_types;
$form = $cgi->parse_form_data;
%form = $cgi->parse_form_data;
または
$form = $cgi->parse_form_data ('GET', 'HEAD' あるいは 'POST');
$cookies = $cgi->parse_cookies;
%cookies = $cgi->parse_cookies;
$status = $cgi->is_error;
$message = $cgi->get_error_message;
$cgi->return_error ('error 1', 'error 2', ...);
$keys = $cgi->get_ordered_keys;
@keys = $cgi->get_ordered_keys;
$cgi->print_data;
$cgi->print_form_data; (deprecated as of v1.8)
$cgi->print_cookie_data; (deprecated as of v1.8)
$new_string = $cgi->wrap_textarea ($string, $length);
@all_values = $cgi->get_multiple_values ($reference);
$cgi->create_variables (\%form);
$cgi->create_variables ($form);
$escaped_string = browser_escape ($string);
$encoded_string = url_encode ($string);
$decoded_string = url_decode ($string);
$status = is_dangerous ($string);
$safe_string = escape_dangerous_chars ($string); # ***これは使わないでください***
説明¶
非常に簡単なやり方で、ファイルのアップロードやクッキーも含めて formやquery情報をデコードするため、このモジュールを使うことができます; あなたはデコードする処理の背後での実際の細部について心配する必要はありません。
メソッド¶
以下のメソッドを使ってフォームとクッキーを処理することができます:
- parse_form_data
-
これは以下のタイプのリクエストを扱います:GET、HEAD そして POST。 デフォルトではCGI::Liteはquery/form情報のどちらのやり方でデコード するかを判定するため環境変数REQUEST_METHODを使います。 しかしv1.8からは、CGI::Liteに情報を特定の方法でデコードすることを 強制させるため適切なリクエスト・メソッドを、この関数に渡すことが
multipart/form-dataでは、アップロードされたファイルはユーザにより 選択されたディレクトリ(set_directoryをご覧ください)に格納されます。 もしタイムスタンプ・モードが有効になっていれば(add_timestampを ご覧ください)、ファイルは以下の形式で名前が付けられます:
timestamp__filename
filenameのところは"Content-disposition"ヘッダで指定されます。 注意:, ブラウザURLはファイルの名前をURLエンコードします。 このモジュールはセキュリティ上の理由から、その情報をデコード しようとはしません。しかしながらサブルーチンを作成し、 filter_filenameメソッドで利用することにより、そうすることが できます。
戻り値
全てのキー/値の組み合わせが入った、ハッシュまたはハッシュへの リファレンスを返します。ファイル情報が入ったフィールドについては、 値にはファイルへのパス、あるいはファイルハンドルが入っています (set_file_typeメソッドをご覧ください).
- parse_new_form_data
-
parse_form_dataと同等。ただしリクエストを処理する前にCGIオブジェクトの 状態をクリアします。これは、CGIオブジェクトが複数のリクエストのために 再利用される、常駐アプリケーション(例えばFCGI)で便利です。例えば
$CGI = new CGI::Lite; while (FCGI::accept > 0) { $Query = $CGI->parse_new_form_data(); <問い合わせの処理> }
- parse_cookies
-
ブラウザから渡されたクッキーをデコードし、解析します。このメソッドは parse_form_dataとほとんど同じように働きます。
- is_error
-
v1.8から、解析するさいのエラーは別に扱われます。このメソッドを 使って、parse_form_data あるいは parse_cookiesのいずれかを 呼び出した後、潜在的なエラーをチェックすることができます。
戻り値
0 成功 1 失敗
- get_error_message
-
form/query情報やクッキーを解析するさいエラーが発生したならば、 エラーメッセージを取り出すため、このメソッドを使うことが出来ます。 is_errorメソッドを呼び出すことにより、エラーをチェックすることが できるということをお忘れなく。
戻り値
エラー・メッセージ
- return_error
-
このメソッドを使って、ブラウザにエラーを返し終了することができます。
- set_platform
-
このメソッドを使って、Webサーバがどこで走っているプラットホームを 設定することができます。CGI::Liteは、そのプラットホームでそれらが 適切に表示できるよう、アップロードされたファイルの行末(EOL)文字を 変換するために、この情報を使います。(add_mime_typeと remove_mime_typeメソッドをご覧ください)。
以下のいずれかを指定することができます(大文字、小文字は区別されません):
Unix EOL: \012 = \n Windows, Windows95, DOS, NT, PC EOL: \015\012 = \r\n Mac あるいは Macintosh EOL: \015 = \r
"Unix"がデフォルトです。
- set_directory
-
アップロードされたファイルが格納されるディレクトリを設定するために 使われます(multipart/form-dataエンコーディング・スキームに だけ適用されます)。
この関数はparse_form_dataを呼び出す前に、呼ばれなければなりません。 そうでなければディレクトリは"/tmp"がデフォルトになります。 アプリケーションが何らかの理由で、そのディレクトリに書き込むことことが できなければ、エラーステータスが返されます。
戻り値
0 失敗 1 成功
- close_all_files
-
"handle"がついたset_file_typeを呼び出した結果としてオープンされている、 アップロードされたファイルの全てを、このメソッドを呼び出すことにより1回で クローズすることができます。
- add_mime_type
-
デフォルトでは、特定のMIMEタイプ(つまり text/plain, text/htmlなど)を 持ったアップロードされたファイルでのEOL文字が変換されます。 このメソッドを使ってMIMEタイプのリストに追加することができます。例えば、 CGI::Liteにアップロードされたapplication/mac-binhex40のファイルの EOL文字を変換させたければ、以下のようにします:
$cgi->add_mime_type ('application/mac-binhex40');
- remove_mime_type
-
このメソッドはadd_mime_typeの逆です。これにより特定のMIMEタイプを はずすことが出来ます。例えば、CGI::Liteにアップロードされた text/htmlのファイルのEOL文字を変換させたくなければ、以下のようにします:
$cgi->remove_mime_type ('text/html');
戻り値
0 失敗 1 成功
- get_mime_types
-
EOL変換が実行されるMIMEタイプのリストを、リファレンスあるいは 実際のリストのどちらかで返します。
- set_file_type
-
parse_form_dataメソッドを呼び出したとき、デフォルトではアップロード されたファイルの名前が返されます。しかしこのメソッドに文字列"handle"を 渡すと、そのファイルへのハンドルが返されます。しかしハンドルの名前は そのファイルに対応しています。
この関数はparse_form_dataを呼び出す前に呼ばなければなりません。 そうでなければ、これは機能しません。
- add_timestamp
-
デフォルトでは、アップロードされたファイルの前にタイムスタンプが追加 されます。しかしタイムスタンプ・モードを完全に無効にするオプション(値0)や、 ファイルが存在している場合にのみタイムスタンプを追加する(値0)オプションも あります。
- filter_filename
-
このメソッドを使って、アップロードされたファイルを名付ける方法を 変更することができます。例えば、アップロードされたファイル名を すべて大文字にしたければ、以下のようなコードを使うことができます:
$cgi->filter_filename (\&make_uppercase); $cgi->parse_form_data; . . . sub make_uppercase { my $file = shift; $file =~ tr/a-z/A-Z/; return $file; }
- set_buffer_size
-
このメソッドによりマルチパート・フォーム・データを扱うときのバッファの大きさを 指定することが出来ます。しかしアルゴリズムが実際に使用する実際のバッファの 大きさは、あなたが指定した3倍にもなることもあります。これにより境界文字列が 複数の読み込みによって"分割"されないということが保障されます。そこでバッファの 大きさを指定するときには、このことを頭に入れて置いてください。
256バイトよりも小さくしたり、マルチパート・フォームデータの合計よりも 大きく設定することはできません。デフォルトの値は1024バイトです。
戻り値
バッファ・サイズ
- get_ordered_keys
-
フォーム・フィールド/クッキーが解析された順序で入っている配列へのリファレンス あるいは配列そのもののどちらかを返します。
戻り値
順に並べられたキー
- print_data
-
(フォーム・データあるいはクッキー情報の)全てのキー/値の組み合わせを順に 並べられた形式で表示しますメソッドprint_form_dataとprint_cookie_dataは バージョン1.8からは廃棄予定になっており、将来のバージョンでは削除されます。
- print_form_data
-
v1.8からは廃棄予定。print_dataをご覧ください。
- print_cookie_data (deprecated as of v1.8)
-
v1.8からは廃棄予定。print_dataをご覧ください。
- wrap_textarea
-
この関数を使って長い文字列を、キャリッジ・リターンと改行(set_platformを ご覧ください)の組み合わせにより固定長に分割されたものに"包む"ことが出来ます。 このメソッドに渡す必要がある2つの引数は、その文字列と、行を分割するものを いれたいと思っている長さです。
戻り値
変更された文字列
- get_multiple_values
-
このモジュールがv1.7と大きく変更されたことの一つに、単一のキーへの複数の 値が、ヌル文字("\0")によって区切られた文字列ではなく、配列への リファレンスで返されることがあります。この関数を実際の配列を返す ために使うことも出来ます。そしてこのメソッドにスカラーの値を渡すと、 それは単にその値を返すでしょう。
1.7よりも古いバージョンのものとの後方互換性を持たせることはできません でした。申し訳ない!
戻り値
複数の値が入った配列
- create_variables
-
時には、ハッシュでのさまざまなキーを表すスカラ変数を持つことが便利 でしょう。このメソッドを使うことにより、それを行うことが出来ます。 以下のようなハッシュを持っているとします:
%form = ('name' => 'shishir gundavaram', 'sport' => 'track and field', 'events' => '100m');
もし以下のように、このメソッドを呼ぶと:
$cgi->create_variables (\%hash);
それは3つのスカラ変数:$name, $sport そして $eventsを作成します。 どう?便利でしょ。
- browser_escape
-
ブラウザにとって特別な意味を持つ文字があります。これらの文字には 以下のものが含まれます:"<" そして ">"。これらの"特別な"文字を表示した ければ、それらを以下の書式を使ってエスケープする必要があります:
&#ascii;
このメソッドは、まさにそれを行います。
戻り値
エスケープされた文字列。
- url_encode
-
このメソッドはあなたが渡した文字列をURLエンコードします。CGIアプリケーション へのクエリ文字列として渡したい、いかなるデータもエンコードすることができます。
戻り値
URLエンコードされた文字列。
- url_decode
-
文字列をURLデコードするため、このメソッドを使うことが出来ます。
戻り値
URLデコードされた文字列。
- is_dangerous
-
このメソッドは危険なメタ文字が存在するかどうかをチェックします。
戻り値
0 安全 1 危険
- escape_dangerous_chars
-
このメソッドを使って全てのメタ文字を"エスケープ"することができます。 この関数を使うことはまったくお勧めできません。 Ronald F. Guilmetteによる勧告のために http://use.perl.org/~cbrooks/journal/10542と http://msgs.securepoint.com/cgi-bin/get/bugtraq0302/94.htmlをご覧ください。 この関数をより安全にするRonaldのパッチが適用されています。しかし バグトラック・メーリング・リストで指摘されているように、 コマンドを実行するとき、外部シェルをまったく実行しないほうがずっと よいことです。どうか勧告とWWWセキュリティFAQをお読みください。
戻り値
エスケープされた文字列。
参考資料¶
もしより包括的なCGIモジュールを探しているのであれば、CGI::*モジュールや CGI.pmを利用することができます。両方ともDr. Lincoln Stein ([email protected])によりメンテナンスされ、あなたの身近な CPANミラーや彼のWebサイトで見つけることが出来るでしょう:
http://www-genome.wi.mit.edu/WWW/tools/scripting
謝辞(=ACKNOWLEDGMENTS)¶
バグを見つけ、提案をしてくれたことについて以下の方々に感謝 いたします:
- Eric D. Friedman ([email protected])
- Thomas Winzig ([email protected])
- Len Charest ([email protected])
- Achim Bohnet ([email protected])
- John E. Townsend ([email protected])
- Andrew McRae ([email protected])
- Dennis Grant ([email protected])
- Scott Neufeld ([email protected])
- Raul Almquist ([email protected])
- そしてそのほかの多くの人たちに!
著作権情報(=COPYRIGHT INFORMATION)¶
Copyright (c) 1995, 1996, 1997 by Shishir Gundavaram
All Rights Reserved
Permission to use, copy, and distribute is hereby granted,
providing that the above copyright notice and this permission
appear in all copies and in supporting documentation.
翻訳者¶
川合孝典([email protected])
訳者注:READMEからの抜粋¶
Note from the CPAN administration: The CGI::Lite module seems to be abandoned by its original author. We cannot contact him anymore. The 2.0 release has been made on 2000-08-20. This 2.001 release is just an emergency release that fixes the most urgent security need. It is not endorsed by the original author. It was put together by me after the advisory http://msgs.securepoint.com/cgi-bin/get/bugtraq0302/94.html on the bugtraq mailing list. Thanks to Ronald F. Guilmette for bringing up this issue.
I do not and will not maintain CGI::Lite and would welcome volunteers to take it over.
2002-02-17 andreas koenig
CPAN管理者からの注意:CGI::Liteモジュールは元の作者によって捨てられたようです。 私たちはもはや彼にコンタクトをとることができません。2.0リリースは2000-08-20に 作られました。この2.001リリースはもっとも切迫したセキュリティ上の必要を 修正しただけの緊急リリース(emergency release)に過ぎません。これは 元の作者によって支持されていません。これは私によってバグトラック・メーリングリスト でのhttp://msgs.securepoint.com/cgi-bin/get/bugtraq0302/94.htmlの勧告 に従って、私が組み立てました。この問題を持ち出してきてくれたことについて Ronald F. Guilmetteに感謝します。
私はCGI::Liteをメンテナンスしませんし、その気もありません。そしてこれを 引き継いでくれえるボランティアを歓迎します。
2002-02-17 andreas koenig