- - - - -
CGI :: Info - Informations sur l'environnement CGI
Version 0.86
Trop souvent, les programmes Perl ont des informations telles que le nom du script du codé dur dans leur source. De manière générale, le codage dur est un mauvais style car il peut rendre les programmes difficiles à lire et réduit la lisibilité et la portabilité. CGI :: Info tente de supprimer cela.
De plus, pour aider le débogage des scripts, CGI :: Info tente de faire des choses raisonnables lorsque vous n'exécutez pas le programme dans un environnement CGI.
CGI :: Info fournit également un pare-feu simple d'application Web. Bien que vous ne devriez pas compter sur lui seul pour assurer la sécurité de votre site Web, c'est une autre couche et chaque petit aide.
use CGI::Info;
my $info = CGI::Info->new();
# ...
Crée un objet CGI :: Info.
Il faut quatre arguments facultatifs Autoriser, logger, attendre et upload_dir, qui sont documentés dans la méthode params ().
Prend un paramètre facultatif Syslog, pour enregistrer les messages à sys :: syslog. Il peut s'agir d'un booléen pour activer / désactiver la journalisation à syslog, ou une référence à un hachage à donner à sys :: syslog :: setlogsock.
Prend un enregistreur de paramètres facultatif, un objet qui est utilisé pour les avertissements
Prend un cache de paramètre facultatif, un objet qui est utilisé pour mettre en cache les recherches IP. Cet objet Cache est un objet qui comprend des messages Get () et set (), tels qu'un objet CHI.
Prend le paramètre facultatif max_upload, qui est la taille maximale du fichier que vous pouvez télécharger (-1 pour aucune limite), la valeur par défaut est de 512 Mo.
Renvoie le nom du script CGI. Ceci est utile pour publier, évitant ainsi de mettre des chemins codés en dur dans les formes
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";
Trouve le nom de chemin complet du script.
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];
}
Renvoie le répertoire du système de fichiers contenant le script.
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';
Renvoyez le nom d'hôte du serveur Web actuel, selon CGI. Si le nom ne peut pas être déterminé à partir du serveur Web, le nom d'hôte du système est utilisé comme rabais. Ce n'est peut-être pas le même que la machine sur laquelle le script CGI s'exécute, certains FAI et autres sites exécutent des scripts sur différentes machines de ceux qui fournissent un contenu statique. Il y a de fortes chances que ce soit DOMAIN_NAME () additionné avec «www» ou «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 est le nom du domaine de contrôle de ce site Web. Habituellement, il sera similaire à Host_name, mais il manquera les préfixes http: // ou www.
Renvoyez l'URL de la machine exécutant le script CGI.
Renvoie une référence à une liste de hachage des arguments CGI.
CGI :: Info vous aide à tester votre script avant le déploiement sur un site Web: s'il n'est pas dans un environnement CGI (par exemple, le script est testé à partir de la ligne de commande), les arguments de ligne de commande du programme (une liste de paires de valeurs de clé =), s'il n'y a pas d'arguments de ligne de commande, alors ils sont lus à partir de stdin comme une liste de lignes de valeur = de valeur. Vous pouvez également donner l'un des —-tablet, --search-moteur, --mobile et - robot pour imiter ces agents. Par exemple:
./script.cgi --mobile name=Nigel
Renvoie undef si les paramètres ne peuvent pas être déterminés ou si aucun n'a été donné.
Si un argument est donné deux fois ou plus, les valeurs sont placées dans une chaîne séparée par des virgules.
La valeur de hachage renvoyée peut être transmise dans CGI :: INTONNET.
Prend quatre paramètres facultatifs: permettez, attendez, logger et upload_dir. Les paramètres sont passés dans un hachage ou une référence à un hachage. Ce dernier est plus efficace car il met moins sur la pile.
Autoriser est une référence à une liste de hachage des paramètres CGI que vous autoriserez. La valeur pour chaque entrée est une expression régulière des valeurs autorisées pour la clé. Une valeur undef signifie que toute valeur sera autorisée. Les arguments qui ne sont pas dans la liste sont ignorés silencieusement. Ceci est utile pour aider à bloquer les attaques sur votre site.
Attendez-vous à une référence à une liste d'arguments que vous vous attendez à voir et à transmettre. Les arguments qui ne sont pas dans la liste sont ignorés silencieusement. Ceci est utile pour aider à bloquer les attaques sur votre site. Son utilisation est obsolète, utilise à la place. Attendre sera supprimé dans une version ultérieure.
Upload_dir est une chaîne contenant un répertoire où les fichiers en cours de téléchargement doivent être stockés.
Prend un enregistreur de paramètres facultatif, un objet qui est utilisé pour les avertissements et les traces. Cet objet Logger est un objet qui comprend les messages Warn () et Trace (), tels qu'un journal :: log4perl ou log :: tout objet.
Les arguments Autoriser, attendre, enregistrer et upload_dir peuvent également être transmis au constructeur.
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';
}
}
Si la demande est une demande XML (c'est-à-dire que le type de contenu de la publication est textuel / xml), CGI :: Info mettra la demande dans l'élément Params 'xml', donc:
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
Obtenez un seul paramètre. Prend un paramètre de chaîne unique en option qui est l'argument à retourner. Si ce paramètre n'est pas donné param () est un wrapper à params () sans arguments.
use CGI::Info;
# ...
my $info = CGI::Info->new();
my $bar = $info->param('foo');
Si le paramètre demandé n'est pas dans la liste autorisée, un message d'erreur sera lancé:
use CGI::Info;
my $allowed = {
foo => qr/d+/
};
my $xyzzy = $info->params(allow => $allowed);
my $bar = $info->param('bar'); # Gives an error message
Renvoie undef si le paramètre demandé n'a pas été donné
Renvoie un booléen si le site Web est consulté sur un appareil mobile tel qu'un téléphone intelligent. Toutes les tablettes sont mobiles, mais tous les appareils mobiles ne sont pas des tablettes.
Renvoie un booléen si le site Web est consulté sur une tablette comme un iPad.
Renvoie les paramètres en tant que chaîne, ce qui est utile pour déboguer ou générer des clés pour un cache.
Renvoie le protocole de connexion, vraisemblablement «http» ou «https», ou undef s'il ne peut pas être déterminé.
Renvoie le nom d'un répertoire dans lequel vous pouvez utiliser pour créer des fichiers temporaires.
La routine est préférable à "TMPDIR" dans Fichier :: Spec, car les programmes CGI s'exécutent souvent sur des serveurs partagés. Cela dit, TMPDIR retombera dans le fichier :: spec-> tmpdir () s'il ne peut pas trouver quelque part mieux.
Si le paramètre `` par défaut '' est donné, utilisez ce répertoire comme un retour plutôt que la valeur dans le fichier :: spec-> tmpdir (). Aucun test de santé mentale n'est effectué, donc si vous donnez la valeur par défaut de «/ inexistante», cela sera retourné.
TMPDIR permet de passer une référence des options.
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();
Renvoie la racine du document. Ceci est préférable à la recherche de document_root dans l'environnement, car cela fonctionnera également lorsque nous ne fonctionnons pas en tant que script CGI, ce qui est utile pour le débogage du script.
Cela peut être exécuté en tant que méthode de classe ou d'objet.
use CGI::Info;
print CGI::Info->rootdir();
Synonyme de RootDir (), pour compatibilité avec Chi.
Synonyme de rootdir (), pour compatibilité avec Apache.
Obtient et définit le nom d'un répertoire que vous pouvez utiliser pour stocker les journaux.
Le visiteur est-il une vraie personne ou un robot?
use CGI::Info;
my $info = CGI::Info->new();
unless($info->is_robot()) {
# update site visitor statistics
}
Le visiteur est-il un moteur de recherche?
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
}
Renvoie l'un des «web», «recherche», «robot» et «mobile».
# 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();
Renvoie la valeur d'un cookie, ou undef si aucun nom n'est donné, ou si le cookie demandé n'est pas dans le pot.
Déprécié - Utilisez plutôt 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";
Renvoie la valeur d'un cookie, ou undef si aucun nom n'est donné, ou si le cookie demandé n'est pas dans le pot. L'API est la même que "param", elle remplacera la méthode "get_cookie" à l'avenir.
use CGI::Info;
my $name = CGI::Info->new()->cookie('name');
print "Your name is $namen";
Définit ou renvoie l'état de l'objet, 200 pour OK, sinon un code d'erreur HTTP
Renvoie les avertissements que l'objet a généré
Parfois, vous ne savez pas ce qu'est le bûcheron avant d'avoir instancié la classe. Cette fonction corrige la situation Catch22.
Méthode de classe pour réinitialiser la classe. Vous devriez le faire dans un environnement FCGI avant d'instancier, mais nulle part ailleurs.
Nigel Horne, <njh at bandsman.co.uk>
IS_TABLET () détecte actuellement les PC iPad et Windows. Les cordes Android ne diffèrent pas entre les tablettes et les phones intelligentes.
Veuillez signaler tous les bogues ou les demandes de fonctionnalités à bug-cgi-info at rt.cpan.org , ou via l'interface Web à http://rt.cpan.org/noauth/reportbug.html?queue=cgi-info. Je serai informé, puis vous serez automatiquement informé des progrès sur votre bogue pendant que j'apporte des modifications.
Params () Renvoie un REF, ce qui signifie que les routines d'appel peuvent modifier le hachage pour d'autres routines. Prenez une copie locale avant d'apporter des modifications à la table si vous ne voulez pas que des choses inattendues se produisent.
Http :: BrowserDetect, https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker
Vous pouvez trouver la documentation pour ce module avec la commande perldoc.
perldoc CGI::Info
Vous pouvez également rechercher des informations sur:
Métacpan
https://metacpan.org/dist/cgi-info
RT: le tracker de demande de CPAN
https://rt.cpan.org/noauth/bugs.html?dist=cgi-info
Matrice des testeurs CPAN
http://matrix.cpantesters.org/?dist=cgi-info
Dépendances des testeurs CPAN
http://deps.cpantesters.org/?module=cgi::info
Copyright 2010-2024 Nigel Horne.
Ce programme est publié sous la licence suivante: GPL2