--------
CGI ::信息 - 有關CGI環境的信息
版本0.86
Perl程序經常將信息(例如將腳本的名稱刻錄到其來源編碼)中。一般而言,硬編碼是不好的樣式,因為它可以使程序難以閱讀,並且可以降低可讀性和可移植性。 CGI ::信息試圖刪除它。
此外,為了幫助腳本調試,CGI :: Info在您不在CGI環境中運行程序時嘗試做明智的事情。
CGI ::信息還提供了一個簡單的Web應用程序防火牆。雖然您不應該單獨依靠它來為您的網站提供安全性,但這是另一層,每一層都有幫助。
use CGI::Info;
my $info = CGI::Info->new();
# ...
創建CGI ::信息對象。
它需要四個可選的參數允許,記錄器,期望和upload_dir,這些參數已記錄在params()方法中。
獲取可選的參數係統日誌,以將消息記錄到Sys :: Syslog。它可以是啟用/禁用記錄到syslog的布爾值,或者對sys :: syslog :: setlogsock的提及。
採用可選參數記錄器,該對像用於警告
獲取可選參數緩存,該對像用於緩存IP查找。此緩存對像是一個對象,可以了解get()和set()消息,例如chi對象。
獲取可選參數max_upload,這是您可以上傳的最大文件大小(無限制),默認值為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是本網站控制域的名稱。通常,它會類似於host_name,但會缺少http://或www前綴。
返回運行CGI腳本的機器的URL。
返回對CGI參數的哈希列表的引用。
CGI :: INFO可幫助您在網站部署之前測試腳本:如果不在CGI環境中(例如,從命令行測試了腳本),則使用程序的命令行參數(鍵=值對列表),如果沒有命令行參數,則從stdin中讀取stdin作為鍵=值=值=值=值。另外,您可以給出一個模仿這些代理商的 - search-engine-mobile和-obot之一。例如:
./script.cgi --mobile name=Nigel
如果無法確定參數或沒有給出任何參數,則返回undef。
如果給出了兩次或更多的參數,則將值放入逗號分隔字符串中。
返回的哈希值可以傳遞到CGI :: UNDAIND中。
獲取四個可選參數:允許,期望,記錄器和upload_dir。這些參數以哈希或對哈希的引用傳遞。後者效率更高,因為它在堆棧上卻較少。
允許是您將允許的CGI參數列表的引用。每個條目的值是鑰匙允許值的正則表達式。 undef值意味著將允許任何值。列表中未忽略的參數被默默地忽略。這對於幫助阻止您網站上的攻擊很有用。
期望是您期望看到和傳遞的參數列表的參考。列表中未忽略的參數被默默地忽略。這對於幫助阻止您網站上的攻擊很有用。它的使用被棄用,而是使用允許。期望將在以後的版本中刪除。
upload_dir是一個字符串,包含一個目錄,其中要存儲上傳的文件。
採用可選參數記錄器,該對像用於警告和跡線。該記錄器對像是一個對象,可以理解warn()和trace()消息,例如log :: log4perl或log ::任何對象。
允許,期望,記錄器和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請求(即帖子的內容類型為text/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
如果在移動設備(例如智能手機)上查看網站,則返回布爾值。所有平板電腦都是移動的,但並非所有移動設備都是平板電腦。
如果在平板電腦(例如iPad)上查看網站,則返回布爾值。
將參數返回為字符串,這對於調試或生成緩存的密鑰很有用。
返回連接協議,大概是“ http”或“ https”,或者如果無法確定,請撤回。
返回可以使用該目錄的名稱來創建臨時文件。
由於CGI程序經常在共享服務器上運行,因此在File :: Spec中比“ TMPDIR”更可取。話雖如此,如果找不到更好的地方,則TMPDIR將返回file :: 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”,“搜索”,“機器人”和“移動”之一。
# 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";
設置或返回對象的狀態,200,否則HTTP錯誤代碼
返回對像生成的警告
有時,您在實例化課程之前不知道記錄器是什麼。此功能可以解決Catch22的情況。
重置課程的類方法。在實例化之前,您應該在FCGI環境中進行此操作,但沒有其他地方。
奈傑爾·霍恩(Nigel Horne), <njh at bandsman.co.uk>
IS_TableT()僅當前檢測iPad和Windows PC。平板電腦和智能手機之間的Android Strings沒有差異。
請bug-cgi-info at rt.cpan.org報告任何錯誤或功能請求,或通過http://rt.cpan.org/noaauth/reportbug.html? quequeue=cgi-info的Web界面。我會收到通知,然後在我進行更改時,您會自動通知您的錯誤進度。
params()返回參考,這意味著調用例程可以更改其他例程的哈希。如果您不希望出乎意料的事情發生,請在對桌子進行修改之前先進行本地副本。
http :: browserdetect,https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
您可以使用perldoc命令找到此模塊的文檔。
perldoc CGI::Info
您還可以查找信息:
metacpan
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
版權2010-2024奈傑爾·霍恩(Nigel Horne)。
該程序根據以下許可發布:GPL2