------
CGI ::情報 - CGI環境に関する情報
バージョン0.86
多くの場合、Perlプログラムには、スクリプトの名前がソースにハードコーディングされているなどの情報があります。一般的に言えば、ハードコーディングは、プログラムを読みにくくすることができ、読みやすさと携帯性を低下させるため、悪いスタイルです。 CGI ::情報はそれを削除しようとします。
さらに、スクリプトのデバッグを支援するために、CGI :: Infoは、CGI環境でプログラムを実行していないときに賢明なことをしようとします。
CGI :: Infoは、シンプルなWebアプリケーションファイアウォールも提供します。あなたはあなたのウェブサイトにセキュリティを提供するためにそれだけに頼るべきではありませんが、それは別のレイヤーであり、あらゆる小さな助けになります。
use CGI::Info;
my $info = CGI::Info->new();
# ...
CGI :: INFOオブジェクトを作成します。
PARAMS()メソッドで文書化されている4つのオプションの引数許可、Logger、Hepcod and Upload_dirが必要です。
オプションのパラメーターSyslogを使用して、メッセージをsys :: syslogにログに記録します。 syslogへのログを有効/無効にするためのブール値、またはsys :: syslog :: setlogsockに与えられるハッシュへの参照。
オプションのパラメーターロガー、警告に使用されるオブジェクトを取ります
IPルックアップのキャッシュに使用されるオブジェクトであるオプションのパラメーターキャッシュを取ります。このキャッシュオブジェクトは、CHIオブジェクトなどのget()およびset()メッセージを理解するオブジェクトです。
オプションのパラメーターmax_uploadを使用します。これは、アップロードできる最大ファイルサイズ(制限なしで-1)で、デフォルトは512MBです。
CGIスクリプトの名前を返します。これは投稿に役立ち、したがって、ハードコーディングされたパスをフォームに入れることを避けます
use CGI::Info;
my $info = CGI::Info->new();
my $script_name = $info->script_name();
# ...
print "<form method="POST" action=$script_name name="my_form">n";
スクリプトのフルパス名を見つけます。
use CGI::Info;
my $info = CGI::Info->new();
my $fullname = $info->script_path();
my @statb = stat($fullname);
if(@statb) {
my $mtime = localtime $statb[9];
print "Last-Modified: $mtimen";
# TODO: only for HTTP/1.1 connections
# $etag = Digest::MD5::md5_hex($html);
printf "ETag: "%x"n", $statb[9];
}
スクリプトを含むファイルシステムディレクトリを返します。
use CGI::Info;
use File::Spec;
my $info = CGI::Info->new();
print 'HTML files are normally stored in ', $info->script_dir(), '/', File::Spec->updir(), "n";
# or
use lib CGI::Info::script_dir() . '../lib';
CGIによると、現在のWebサーバーのホスト名を返してください。 Webサーバーから名前を決定できない場合、システムのホスト名はフォールバックとして使用されます。これは、CGIスクリプトが実行されているマシンと同じではない場合があります。一部のISPや他のサイトは、静的コンテンツを配信しているマシンとは異なるマシンでスクリプトを実行します。これがdomain_name()が「www」または「cgi」のいずれかで完成する可能性があります。
use CGI::Info;
my $info = CGI::Info->new();
my $host_name = $info->host_name();
my $protocol = $info->protocol();
# ...
print "Thank you for visiting our <A HREF="$protocol://$host_name">Website!</A>";
domain_nameは、このWebサイトの制御ドメインの名前です。通常、host_nameに似ていますが、http://またはwwwプレフィックスがありません。
CGIスクリプトを実行しているマシンのURLを返します。
CGI引数のハッシュリストへの参照を返します。
CGI ::情報は、ウェブサイトで展開する前にスクリプトをテストするのに役立ちます。CGI環境にない場合(たとえば、スクリプトがコマンドラインからテストされている場合)、プログラムのコマンドライン引数(キー=値ペアのリスト)が使用されます。また、それらのエージェントを模倣するために、-tablet、 - search-engine、 - mobile、および - robotの1つを与えることができます。例えば:
./script.cgi --mobile name=Nigel
パラメーターを決定できない場合、または何も与えられていない場合、UNDEFを返します。
引数が2回以上与えられた場合、値はコンマ分離文字列に入れられます。
返されたハッシュ値は、CGI :: untaintに渡すことができます。
許可、期待、logger、upload_dirの4つのオプションパラメーターを取ります。パラメーターは、ハッシュまたはハッシュへの参照で渡されます。後者は、スタックの上に置かれるため、より効率的です。
許可は、許可するCGIパラメーターのハッシュリストへの参照です。各エントリの値は、キーの許可された値の正規表現です。 UNDEF値は、任意の値が許可されることを意味します。リストにない引数は静かに無視されます。これは、サイトへの攻撃をブロックするのに役立ちます。
期待するのは、あなたが見て渡すことを期待する議論のリストへの参照です。リストにない引数は静かに無視されます。これは、サイトへの攻撃をブロックするのに役立ちます。その使用は非推奨です。代わりに使用可能です。後のバージョンで削除される予定です。
upload_dirは、アップロードされるファイルが保存されるディレクトリを含む文字列です。
警告とトレースに使用されるオブジェクトであるオプションのパラメーターロガーを取ります。このロガーオブジェクトは、log :: log4perlまたはlog ::任意のオブジェクトなどのWarn()およびtrace()メッセージを理解するオブジェクトです。
許可、予想、Loggerおよびupload_dir引数もコンストラクターに渡すことができます。
use CGI::Info;
use CGI::Untaint;
# ...
my $info = CGI::Info->new();
my %params;
if($info->params()) {
%params = %{$info->params()};
}
# ...
foreach(keys %params) {
print "$_ => $params{$_}n";
}
my $u = CGI::Untaint->new(%params);
use CGI::Info;
use CGI::IDS;
# ...
my $info = CGI::Info->new();
my $allowed = {
foo => qr/^d*$/, # foo must be a number, or empty
bar => undef, # bar can be given and be any value
xyzzy => qr/^[ws-]+$/, # must be alphanumeric
# to prevent XSS, and non-empty
# as a sanity check
};
my $paramsref = $info->params(allow => $allowed);
# or
my @expected = ('foo', 'bar');
my $paramsref = $info->params({
expect => @expected,
upload_dir = $info->tmpdir()
});
if(defined($paramsref)) {
my $ids = CGI::IDS->new();
$ids->set_scan_keys(scan_keys => 1);
if($ids->detect_attacks(request => $paramsref) > 0) {
die 'horribly';
}
}
リクエストがXMLリクエストの場合(つまり、投稿のコンテンツタイプはテキスト/XMLです)、cgi :: infoはリクエストをパラメーション要素 'xml'に入れます。したがって:したがって:
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $paramsref = $info->params(); # See BUGS below
my $xml = $$paramsref{'XML'};
# ... parse and process the XML request in $xml
単一のパラメーターを取得します。戻るという引数であるオプションの単一文字列パラメーターを取ります。そのパラメーターが与えられていない場合、param()は引数がないparams()のラッパーです。
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $bar = $info->param('foo');
要求されたパラメーターが許可リストにない場合、エラーメッセージがスローされます。
use CGI::Info;
my $allowed = {
foo => qr/d+/
};
my $xyzzy = $info->params(allow => $allowed);
my $bar = $info->param('bar'); # Gives an error message
要求されたパラメーターが与えられなかった場合、UNDEFを返します
Webサイトがスマートフォンなどのモバイルデバイスで表示されている場合、ブール値を返します。すべてのタブレットはモバイルですが、すべてのモバイルデバイスがタブレットではありません。
WebサイトがiPadなどのタブレットで表示されている場合、ブール値を返します。
パラメーターを文字列として返します。これは、キャッシュのキーのデバッグまたは生成に役立ちます。
接続プロトコル、おそらく「HTTP」または「HTTPS」、または決定できない場合はUNDEFを返します。
一時ファイルを作成するために使用できるディレクトリの名前を返します。
CGIプログラムは共有サーバーで実行されることが多いため、ルーチンはファイル:: Specの「TMPDIR」よりも好ましいです。そうは言っても、TMPDIRは、どこかでより良い場所を見つけることができない場合、ファイル:: spec-> tmpdir()に戻ります。
パラメーター「デフォルト」が指定されている場合は、そのディレクトリをファイル:: spec-> tmpdir()の値ではなく、フォールバックとして使用します。正気テストは行われないため、「/存在しない」のデフォルト値を指定すると、返されます。
TMPDIRでは、オプションの参照を渡すことができます。
use CGI::Info;
my $info = CGI::Info->new();
my $dir = $info->tmpdir(default => '/var/tmp');
$dir = $info->tmpdir({ default => '/var/tmp' });
# or
my $dir = CGI::Info->tmpdir();
ドキュメントルートを返します。これは、環境のdocument_rootを見るよりも望ましいです。これは、スクリプトのデバッグに役立つCGIスクリプトとして実行されていないときにも機能するためです。
これは、クラスまたはオブジェクトメソッドとして実行できます。
use CGI::Info;
print CGI::Info->rootdir();
rootdir()の同義語、chiとの互換性。
rootdir()の同義語、Apacheとの互換性。
ログを保存するために使用できるディレクトリの名前を取得して設定します。
訪問者は実在の人物ですか、それともロボットですか?
use CGI::Info;
my $info = CGI::Info->new();
unless($info->is_robot()) {
# update site visitor statistics
}
訪問者は検索エンジンですか?
use CGI::Info;
if(CGI::Info->new()->is_search_engine()) {
# display generic information about yourself
} else {
# allow the user to pick and choose something to display
}
「Web」、「検索」、「ロボット」、「モバイル」の1つを返します。
# Code to display a different web page for a browser, search engine and
# smartphone
use Template;
use CGI::Info;
my $info = CGI::Info->new();
my $dir = $info->rootdir() . '/templates/' . $info->browser_type();
my $filename = ref($self);
$filename =~ s/::///g;
$filename = "$dir/$filename.tmpl";
if((!-f $filename) || (!-r $filename)) {
die "Can't open $filename";
}
my $template = Template->new();
$template->process($filename, {}) || die $template->error();
名前が与えられていない場合、または要求されたCookieが瓶にない場合は、Cookieの価値を返します。
非推奨 -代わりにCookie()を使用します。
use CGI::Info;
my $i = CGI::Info->new();
my $name = $i->get_cookie(cookie_name => 'name');
print "Your name is $namen";
my $address = $i->get_cookie('address');
print "Your address is $addressn";
名前が与えられていない場合、または要求されたCookieが瓶にない場合は、Cookieの価値を返します。 APIは「PARAM」と同じで、将来的には「get_cookie」メソッドを置き換えます。
use CGI::Info;
my $name = CGI::Info->new()->cookie('name');
print "Your name is $namen";
オブジェクトのステータスを設定または返します。
オブジェクトが生成した警告を返します
クラスをインスタンスするまで、ロガーが何であるかわからない場合があります。この関数は、CATCH22の状況を修正します。
クラスをリセットするクラスメソッド。インスタンス化する前にFCGI環境でこれを行う必要がありますが、他にはありません。
nigel Horne、 <njh at bandsman.co.uk>
is_tablet()は現在、iPadとWindowsのPCのみを検出しています。 Android文字列は、タブレットとスマートフォン間で違いはありません。
bug-cgi-info at rt.cpan.orgへのバグまたは機能のリクエストを、またはhttp://rt.cpan.org/noauth/reportbug.html?queue = cgi-infoのWebインターフェイスを介して報告してください。私は通知されます、そして、私が変更するとき、あなたはあなたのバグの進捗状況を自動的に通知されます。
params()は、呼び出しルーチンが他のルーチンのハッシュを変更できることを意味します。予期しないことが起こりたくない場合は、テーブルの修正を行う前に、地元のコピーを取ります。
http :: browserdetect、https://github.com/mitchellkrogza/apache- gultimate-bad-bot-blocker
このモジュールのドキュメントは、perldocコマンドを使用して見つけることができます。
perldoc CGI::Info
次の情報を探すこともできます。
メタクパン
https://metacpan.org/dist/cgi-info
RT:CPANのリクエストトラッカー
https://rt.cpan.org/noauth/bugs.html?dist=cgi-info
CPANテスターのマトリックス
http://matrix.cpantesters.org/?dist=cgi-info
CPANテスターの依存関係
http://deps.cpantesters.org/?module=cgi::info
Copyright 2010-2024 Nigel Horne。
このプログラムは、次のライセンスの下でリリースされます:GPL2