Comment régler le mode taint dans un script Perl avec unComment définir le mode d'altération dans un script perl avec un '#!/Usr/bin/env perl'- shebang?
#!/usr/bin/env perl
tralala?
Comment régler le mode taint dans un script Perl avec unComment définir le mode d'altération dans un script perl avec un '#!/Usr/bin/env perl'- shebang?
#!/usr/bin/env perl
tralala?
Vous pouvez passer la variable d'environnement PERL5OPT sur la ligne de tralala:
#!/usr/bin/env PERL5OPT=-T perl
Cela semble tout plutôt à l'envers pour moi.
Une autre option, est de ré-exécuter le script en mode taint si vous détectez c'est pas:
#!/usr/bin/env perl
warn 'Taint mode is '.(${^TAINT} ? 'on' : 'off'); # For debugging
exec($^X,'-T',$0,@ARGV) unless ${^TAINT};
# do stuff under taint mode here
De toute évidence, cela est un grand succès de la performance de démarrage.
Vous ne pouvez pas spécifier une variable dans un shebang avec/usr/bin/env. Cela entraînera env à s'exécuter dans une boucle infinie, n'obtenant même pas à la commande demandée. J'ai testé cela contre Linux et FreeBSD. – Zed
Oui - il semble que seul OS-X supporte actuellement la première incantation. –
Depuis le mode taint ne peut être activé par le drapeau -T
et env
n'acceptera aucun drapeaux dans une ligne de tralala, votre meilleure option est d'exécuter le programme via perl -T script.pl
plutôt que d'exécuter le script directement.
Si vous devez absolument respecter le mode taint dans le tralala, vous pourriez faire un script taintperl
quelque part dans votre PATH (par exemple/usr/local/bin) avec le contenu suivant:
#!/bin/sh
/usr/bin/env perl -T
Ensuite, dans votre script Perl, ont
#!/usr/bin/env taintperl
Sur de nombreux systèmes d'exploitation, vous ne pouvez pas utiliser un script interprété comme interpréteur de script. Vous devez le faire dans un langage compilé, par ex. C –
@GavinBrock Cela est vrai pour le programme mentionné immédiatement après le '#!'. Ici, c'est '/ usr/bin/env', qui est compilé. À son tour, 'env' ne se soucie pas de savoir si' taintperl' est un programme compilé ou non. – maxelost
Cela aide si vous ne pouvez pas prédire l'emplacement du binaire perl (/ usr/bin ou/usr/local/bin). http://www.perlmonks.org/?node_id=716740 - Je suppose que la question est de savoir si vous pouvez prédire l'emplacement d'env ... –
Sur mon PC j'utilise/usr/local/bin/perl et sur mon netbook/usr/bin/perl. Donc, avec/usr/bin/env perl, je n'ai pas besoin de changer mes scripts perl. Et je suppose qu'ils vont expédier la prochaine version de mon OS avec perl-version 5.10.1, alors peut-être que je vais utiliser sur mon PC à nouveau le onboard-perl avec/usr/bin/perl et là aussi je n'aurai pas à changer mes shebangs. –
Gavin, l'emplacement de 'env' est standardisé. – daxim