2015-09-16 1 views
0

Lorsque les variables de Perl ne sont pas altérées, toutes les tâches doivent-elles être effectuées localement dans le fichier Perl (.pl) ou peuvent-elles être transmises à un module Perl (.pm)?Perl Untaint Variable en passant par le sous-programme du module Perl

Par exemple, blanchissez peut ressembler à ceci:

$string =~ /\A(.*)\z/s 

(évidemment, il est une mauvaise pratique de match quoi que ce soit une couverture d'une entrée, cela montre juste un exemple)

Je suis Je me demande s'il est possible de le passer par un .pm car je veux exécuter sur la même expression regex dans plusieurs fichiers .pl.

use myModule; 

$string = myModule::myUntaint($string); 

Où "myUntaint" est un sous-programme dans le .pm "monModule" qui contient mon regex.

+2

Il ne devrait jamais ressembler à '$ string = ~/A (. *) \ Z/s' ou' myModule :: myUntaint ($ chaîne); Cela devrait valider la valeur. – ikegami

+2

Avez-vous essayé? Je suppose que parce que 'CGI :: Untaint' ou' Untaint' existe, cela fonctionne. Cependant, pour des raisons évidentes, vous ne devriez pas vous contenter de vous couvrir, car il s'agit de s'assurer que les intrants potentiellement dangereux ne sont plus. – Sobrique

+0

Merci pour l'entrée. J'ai utilisé '$ string = ~/\ A (. *) \ Z/s' comme un exemple rapide de non-gêne. C'est évidemment une pratique horrible pour faire correspondre un match - n'importe quoi quand il n'est pas taché. Le sous-programme 'myUntaint()' dans le fichier myModule .pm contiendrait la regex appropriée pour valider la valeur. – SpenserAD

Répondre

0

Oui, vous pouvez avoir un sous-programme dans un module qui prend un paramètre corrompu et renvoie une expression non tachée qui en dérive.

Mais vous ne devriez pas utiliser une expression de correspondance générique comme /\A(.*)\z/s pour ne pas être affecté. Cela va à l'encontre du but de l'altération, qui est de s'assurer que la valeur ressemble à ce que vous attendiez avant de l'utiliser. (Mais cela n'a rien à voir avec l'endroit où se trouve le code qui résiste à la vie.)

+0

Merci pour l'entrée. Vous avez raison, on devrait rarement (jamais) faire une expression de match-rien de couverture. Cela a été écrit juste comme un exemple rapide. – SpenserAD