-----
CGI :: 정보 - CGI 환경에 대한 정보
버전 0.86
너무 자주 Perl 프로그램에는 스크립트 이름이 소스에 하드 코딩 된 정보가 있습니다. 일반적으로, 하드 코딩은 프로그램을 읽기 어렵게 만들 수 있고 가독성과 이식성을 줄일 수 있기 때문에 나쁜 스타일입니다. CGI :: 정보를 제거하려고합니다.
또한 스크립트 디버깅을 돕기 위해 CGI :: 정보는 CGI 환경에서 프로그램을 실행하지 않을 때 현명한 일을 시도합니다.
CGI :: 정보는 간단한 웹 응용 프로그램 방화벽도 제공합니다. 웹 사이트에 보안을 제공하기 위해 혼자 의존해서는 안되지만, 그것은 또 다른 계층이며 모든 작은 도움이됩니다.
use CGI::Info;
my $info = CGI::Info->new();
# ...
CGI :: 정보 객체를 만듭니다.
Params () 메소드에 문서화 된 4 가지 선택 인수 허용 인 Logger, expling 및 upload_dir가 필요합니다.
Sys :: Syslog에 메시지를 로그인하기 위해 선택적 매개 변수 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에 따르면 현재 웹 서버의 호스트 이름을 반환하십시오. 웹 서버에서 이름을 결정할 수없는 경우 시스템의 호스트 이름은 낙하로 사용됩니다. 이것은 CGI 스크립트가 실행중인 시스템과 같지 않을 수 있으며 일부 ISP 및 기타 사이트는 정적 컨텐츠를 제공하는 제품과 다른 컴퓨터에서 스크립트를 실행합니다. 이것이 'www'또는 'cgi'로 Prefended Domain_name () 일 가능성이 높습니다.
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 환경에 있지 않은 경우 (예 : 스크립트가 명령 줄에서 테스트되는 경우) 프로그램의 명령 줄 인수 (키 = 값 값 목록)가 사용됩니다. 또한-TABLET, -Search-Engine,-Mobile 및-Robot 중 하나를 제공하여 해당 에이전트를 모방 할 수 있습니다. 예를 들어:
./script.cgi --mobile name=Nigel
매개 변수를 결정할 수 없거나 아무것도 주어지지 않은 경우 undef를 반환합니다.
인수가 두 번 이상 주어지면 값은 쉼표로 분리 된 문자열에 넣습니다.
반환 된 해시 값은 cgi :: untaint로 전달 될 수 있습니다.
허용, 기대, 로거 및 업로드 _dir의 4 가지 선택 매개 변수를 취합니다. 매개 변수는 해시 또는 해시에 대한 참조로 전달됩니다. 후자는 스택에 덜 넣기 때문에 더 효율적입니다.
허용은 허용 할 CGI 매개 변수의 해시 목록에 대한 참조입니다. 각 항목의 값은 키에 대한 허용 값의 정규 표현입니다. undef 값은 모든 값이 허용된다는 것을 의미합니다. 목록에없는 인수는 조용히 무시됩니다. 사이트의 공격을 차단하는 데 도움이됩니다.
기대는 당신이보고 전달할 것으로 예상되는 인수 목록에 대한 언급입니다. 목록에없는 인수는 조용히 무시됩니다. 사이트의 공격을 차단하는 데 도움이됩니다. 사용은 더 이상 사용되지 않습니다. 대신 사용 허용. 예상은 이후 버전에서 제거됩니다.
UPLOAD_DIR은 업로드 된 파일을 저장 해야하는 디렉토리가 포함 된 문자열입니다.
경고 및 흔적에 사용되는 객체 인 옵션 매개 변수 로거를 사용합니다. 이 Logger 객체는 log :: log4perl 또는 log :: 모든 객체와 같은 Warn () 및 trace () 메시지를 이해하는 객체입니다.
허용, 기대, 로거 및 업로드 _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 :: 정보는 요청을 매개 변수 요소 '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'또는 undef를 반환합니다.
임시 파일을 작성하는 데 사용할 수있는 디렉토리의 이름을 반환합니다.
CGI 프로그램이 종종 공유 서버에서 실행되기 때문에 File :: 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();
문서 루트를 반환합니다. CGI 스크립트로 실행되지 않을 때도 스크립트 디버깅에 유용하기 때문에 환경에서 Document_Root를 보는 것이 좋습니다.
클래스 또는 객체 방법으로 실행할 수 있습니다.
use CGI::Info;
print CGI::Info->rootdir();
chi와의 호환성을 위해 rootdir ()의 동의어.
apache와의 호환성을 위해 rootdir ()의 동의어.
로그인을 저장하는 데 사용할 수있는 디렉토리의 이름을 가져 와서 설정합니다.
방문자는 실제 사람입니까 아니면 로봇입니까?
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
}
'웹', '검색', '로봇'및 '모바일'중 하나를 반환합니다.
# 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();
쿠키의 값을 반환하거나 이름이 주어지지 않거나 요청 된 쿠키가 항아리에 있지 않은 경우 undef를 반환합니다.
감가 상각 - 대신 쿠키 ()를 사용하십시오.
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";
쿠키의 값을 반환하거나 이름이 주어지지 않거나 요청 된 쿠키가 항아리에 있지 않은 경우 undef를 반환합니다. API는 "param"과 동일하며 향후 "get_cookie"메소드를 대체합니다.
use CGI::Info;
my $name = CGI::Info->new()->cookie('name');
print "Your name is $namen";
OK의 경우 객체의 상태를 설정하거나 반환합니다. 그렇지 않으면 HTTP 오류 코드
객체가 생성 한 경고를 반환합니다
때로는 수업을 인스턴스화 할 때까지 로거가 무엇인지 모릅니다. 이 기능은 Catch22 상황을 수정합니다.
클래스 메소드 클래스를 재설정하는 방법. 인스턴스팅하기 전에 FCGI 환경 에서이 작업을 수행해야하지만 다른 곳은 없습니다.
Nigel Horne, <njh at bandsman.co.uk>
is_tablet ()은 현재 iPad 및 Windows PC 만 감지합니다. 안드로이드 문자열은 태블릿과 스마트 폰마다 다르지 않습니다.
bug-cgi-info at rt.cpan.org 또는 http://rt.cpan.org/noauth/reportbug.html?queue=cgi-info의 웹 인터페이스를 통해 버그 또는 기능 요청을보고하십시오. 통보를 받으면 변경할 때 버그의 진행 상황을 자동으로 알릴 것입니다.
params () ()는 Ref를 반환합니다. 즉, 호출 루틴이 다른 루틴의 해시를 변경할 수 있습니다. 예상치 못한 일이 일어나기를 원하지 않으면 테이블에 수정하기 전에 현지 사본을 가져 가십시오.
http :: browserdetect, https://github.com/mitchellkrogza/apache-ultimate-bad-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-bot-block습니다
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
저작권 2010-2024 Nigel Horne.
이 프로그램은 다음 라이센스에 따라 릴리스됩니다. GPL2