- - - - - -
CGI :: Info - Informationen zur CGI -Umgebung
Version 0.86
Allzu oft haben Perl-Programme Informationen wie den Namen des Skripts, der in ihrer Quelle fest codiert ist. Im Allgemeinen ist hartcodieren ein schlechter Stil, da die Programme schwierig zu lesen machen können und die Lesbarkeit und Portabilität verringert. CGI :: Info versucht, dies zu entfernen.
Um das Debuggen des Skripts zu unterstützen, versucht CGI :: Info, vernünftige Dinge zu tun, wenn Sie das Programm nicht in einer CGI -Umgebung ausführen.
CGI :: Info bietet auch eine einfache Webanwendungs -Firewall. Obwohl Sie sich nicht allein darauf verlassen sollten, um Ihrer Website Sicherheit zu bieten, ist dies eine andere Ebene und jedes kleine hilft.
use CGI::Info;
my $info = CGI::Info->new();
# ...
Erstellt ein CGI :: Info -Objekt.
Es dauert vier optionale Argumente, logger, erwartet und upload_dir, die in der Methode params () dokumentiert sind.
Nimmt ein optionales Parameter -Syslog, um Nachrichten auf sys :: syslog zu protokollieren. Es kann ein Boolean sein, die Protokollierung bei Syslog zu aktivieren/zu deaktivieren, oder ein Hinweis auf einen Hash, der an Sys :: syslog :: setLogSock übergeben werden soll.
Nimmt einen optionalen Parameterprotokoll, ein Objekt, das für Warnungen verwendet wird
Nimmt optionaler Parameter -Cache, ein Objekt, mit dem IP -Lookups zwischengespeichert werden. Dieses Cache -Objekt ist ein Objekt, das die Meldungen get () und set () versteht, wie z. B. ein Chi -Objekt.
Nimmt optionaler Parameter max_upload, was die maximale Dateigröße ist, die Sie hochladen können (-1 für keine Grenze), die Standardeinstellung beträgt 512 MB.
Gibt den Namen des CGI -Skripts zurück. Dies ist nützlich für die Veröffentlichung und vermeiden daher, hartcodierte Wege in Formulare zu bringen
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";
Findet den vollständigen Pfadnamen des Skripts.
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];
}
Gibt das Dateisystemverzeichnis zurück, das das Skript enthält.
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';
Geben Sie laut CGI den Hostnamen des aktuellen Webservers zurück. Wenn der Name nicht vom Webserver ermittelt werden kann, wird der Hostname des Systems als Rückfall verwendet. Dies ist möglicherweise nicht die gleiche wie die Maschine, auf der das CGI -Skript ausgeführt wird. Einige ISPs und andere Websites führen Skripte auf verschiedenen Maschinen aus, die statische Inhalte liefern. Es besteht eine gute Chance, dass dies domain_name () ist, die entweder mit 'www' oder 'cgi' vorbereitet wird.
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 ist der Name der Kontrolldomäne für diese Website. Normalerweise ähnelt es Host_name, fehlt jedoch die Präfixe http: // oder www.
Geben Sie die URL der Maschine zurück, die das CGI -Skript ausführt.
Gibt einen Verweis auf eine Hash -Liste der CGI -Argumente zurück.
CGI :: Info hilft Ihnen, Ihr Skript vor der Bereitstellung auf einer Website zu testen: Wenn es sich nicht in einer CGI -Umgebung befindet (z. B. das Skript wird aus der Befehlszeile getestet), werden die Befehlszeilenargumente des Programms (eine Liste von Key = Value -Paaren) verwendet. Sie können auch eines von-tablet,-Search-Engine, -Mobile und--robot geben, um diese Mittel nachzuahmen. Zum Beispiel:
./script.cgi --mobile name=Nigel
Gibt UNDEF zurück, wenn die Parameter nicht bestimmt werden können oder wenn keine gegeben wurde.
Wenn ein Argument zweimal oder mehr verabreicht wird, werden die Werte in eine von Kommas getrennte Zeichenfolge eingefügt.
Der zurückgegebene Hash -Wert kann in CGI :: Unaint übergeben werden.
Nimmt vier optionale Parameter: Ermöglichen, erwarten, logger und upload_dir. Die Parameter werden in einem Hash oder als Verweis auf einen Hash übergeben. Letzteres ist effizienter, da es weniger auf den Stapel steckt.
Zulassen ist ein Verweis auf eine Hash -Liste von CGI -Parametern, die Sie zulassen. Der Wert für jeden Eintrag ist ein regelmäßiger Ausdruck der zulässigen Werte für den Schlüssel. Ein UNDEF -Wert bedeutet, dass ein Wert zulässig ist. Argumente, die nicht in der Liste sind, werden stillschweigend ignoriert. Dies ist nützlich, um Angriffe auf Ihrer Website zu blockieren.
Erwarten Sie einen Hinweis auf eine Liste von Argumenten, die Sie erwarten und weitergeben. Argumente, die nicht in der Liste sind, werden stillschweigend ignoriert. Dies ist nützlich, um Angriffe auf Ihrer Website zu blockieren. Seine Verwendung ist veraltet, stattdessen zulässt. Erwarten Sie in einer späteren Version.
Upload_Dir ist eine Zeichenfolge, die ein Verzeichnis enthält, in dem Dateien hochgeladen werden, zu gespeichert werden sollen.
Nimmt einen optionalen Parameter -Logger, ein Objekt, das für Warnungen und Spuren verwendet wird. Dieses Logger -Objekt ist ein Objekt, das Warn () und Trace () Nachrichten versteht, z. B. ein log :: log4perl oder log :: ein Objekt.
Die Argumente zum Ermöglichen, Erwarten, Logger und Upload_Dir können ebenfalls an den Konstruktor übergeben werden.
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';
}
}
Wenn es sich bei der Anforderung um eine XML -Anforderung handelt (dh der Inhaltstyp des Beitrags ist Text/XML), geben CGI :: die Anforderung in das Params -Element 'XML' ein, also:
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
Holen Sie sich einen einzelnen Parameter. Nimmt einen optionalen Einzelstring -Parameter ein, das das Argument für die Rückgabe ist. Wenn dieser Parameter nicht angegeben ist, ist param () ein Wrapper in Params () ohne Argumente.
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $bar = $info->param('foo');
Wenn der angeforderte Parameter nicht in der zulässigen Liste ist, wird eine Fehlermeldung geworfen:
use CGI::Info;
my $allowed = {
foo => qr/d+/
};
my $xyzzy = $info->params(allow => $allowed);
my $bar = $info->param('bar'); # Gives an error message
Gibt UNDEF zurück, wenn der angeforderte Parameter nicht gegeben wurde
Gibt einen Booleschen zurück, wenn die Website auf einem mobilen Gerät wie einem Smartphone angezeigt wird. Alle Tablets sind mobil, aber nicht alle mobilen Geräte sind Tablets.
Gibt einen Booleschen zurück, wenn die Website auf einem Tablet wie einem iPad angezeigt wird.
Gibt die Parameter als Zeichenfolge zurück, die zum Debuggen oder Generieren von Schlüssel für einen Cache nützlich ist.
Gibt das Verbindungsprotokoll zurück, vermutlich "http" oder "https" oder nicht, wenn es nicht bestimmt werden kann.
Gibt den Namen eines Verzeichnisses zurück, mit dem Sie temporäre Dateien erstellen können.
Die Routine ist "TMPDIR" in Datei :: spec vorzuziehen, da CGI -Programme häufig auf gemeinsam genutzten Servern ausgeführt werden. Trotzdem fällt TMPDIR auf Datei zurück :: spec-> tmpdir (), wenn es nicht an einem besseren Ort finden kann.
Wenn der Parameter 'Standard' angegeben ist, verwenden Sie dieses Verzeichnis eher als Fall-Back als den Wert in Datei :: spec-> tmpdir (). Wenn Sie also den Standardwert von '/nicht existant' angeben, werden keine Vernunftstests durchgeführt, die zurückgegeben werden.
TMPDIR ermöglicht eine Referenz der Optionen.
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();
Gibt das Dokumentwurzel zurück. Dies ist es vorzuziehen, Document_Root in der Umgebung zu betrachten, da es auch funktioniert, wenn wir nicht als CGI -Skript ausgeführt werden, was für das Skriptdebuggen nützlich ist.
Dies kann als Klasse oder Objektmethode ausgeführt werden.
use CGI::Info;
print CGI::Info->rootdir();
Synonym von rootDir () für die Kompatibilität mit Chi.
Synonym von rootDir () für die Kompatibilität mit Apache.
Erhält und legt den Namen eines Verzeichnisses fest, mit dem Sie Protokolle speichern können.
Ist der Besucher eine echte Person oder ein Roboter?
use CGI::Info;
my $info = CGI::Info->new();
unless($info->is_robot()) {
# update site visitor statistics
}
Ist der Besucher eine Suchmaschine?
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
}
Gibt einen von "Web", "Suche", "Roboter" und "Mobile" zurück.
# 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();
Gibt den Wert eines Cookies zurück oder undf, wenn kein Name angegeben ist oder das angeforderte Cookie nicht im Glas ist.
Veraltet - Verwenden Sie stattdessen 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";
Gibt den Wert eines Cookies zurück oder undf, wenn kein Name angegeben ist oder das angeforderte Cookie nicht im Glas ist. API ist der gleiche wie "Param". Sie ersetzt die Methode "get_cookie" in Zukunft.
use CGI::Info;
my $name = CGI::Info->new()->cookie('name');
print "Your name is $namen";
Legt oder gibt den Status des Objekts 200 für OK fest, sonst einen HTTP -Fehlercode
Gibt die Warnungen zurück, die das Objekt generiert hat
Manchmal wissen Sie nicht, was der Logger ist, bis Sie die Klasse instanziiert haben. Diese Funktion behebt die Catch22 -Situation.
Klassenmethode zum Zurücksetzen der Klasse. Sie sollten dies in einer FCGI -Umgebung tun, bevor Sie es instanziieren, aber nirgendwo anders.
Nigel Horne, <njh at bandsman.co.uk>
is_tablet () erkennt derzeit nur das iPad und die Windows -PCs. Android-Saiten unterscheiden sich nicht zwischen Tablets und Smart-Phones.
Bitte melden Sie Fehler oder Feature-Anfragen an bug-cgi-info at rt.cpan.org oder über die Webschnittstelle unter http://rt.cpan.org/noauth/reportbug.html?queue=cgi-info. Ich werde benachrichtigt und werden dann automatisch über den Fortschritt in Ihrem Fehler informiert, da ich Änderungen vornehme.
Params () gibt einen REF zurück, was bedeutet, dass das Aufrufen von Routinen den Hash für andere Routinen ändern kann. Nehmen Sie eine lokale Kopie vor, bevor Sie Änderungen an den Tisch vornehmen, wenn Sie nicht möchten, dass unerwartete Dinge passieren.
Http :: browserdetekte, https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
Sie finden eine Dokumentation für dieses Modul mit dem PERLDOC -Befehl.
perldoc CGI::Info
Sie können auch nach Informationen suchen unter:
Metacpan
https://metacpan.org/dist/cgi-info
RT: CPAN -Anfrage -Tracker
https://rt.cpan.org/noauth/bugs.html?dist=cgi-info
CPAN -Testermatrix
http://matrix.cpantesters.org/?dist=cgi-info
CPAN -Testerabhängigkeiten
http://deps.cpantesters.org/?module=cgi::info
Copyright 2010-2024 Nigel Horne.
Dieses Programm wird unter der folgenden Lizenz veröffentlicht: GPL2