--------
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