Il y a beaucoup de choses qui ont besoin de soin dans votre script, et j'en parle pour la plupart dans le chapitre "Techniques de programmation sécurisées" de Mastering Perl.Vous pouvez également en trouver dans perlsec/
Puisque vous prenez des données externes et les transmettez à d'autres programmes externes, vous devriez utiliser la vérification des traces pour vous assurer que les données correspondent à vos attentes. Et si quelqu'un était capable de glisser quelque chose de plus dans ces fichiers?
Lorsque vous souhaitez transmettre des données à des programmes externes, utilisez system dans le formulaire de liste afin que l'interpréteur ne puisse pas interpréter les méta-caractères possibles.
Au lieu de compter sur le PATH
pour trouver les programmes que vous comptez utiliser, spécifiez leurs chemins complets explicitement pour vous assurer au moins exécutez le fichier que vous pensez que vous êtes (et non une personne quelque chose faufilé dans un répertoire qui est antérieure au PATH
). Si vous étiez vraiment paranoïaque (comme la vérification de l'altération), vous pouvez également vérifier que ces fichiers et répertoires possèdent les autorisations appropriées (par exemple, non inscriptibles dans le monde entier).
Tout comme une note de bonus, si vous voulez seulement une ligne à partir d'un descripteur de fichier, vous pouvez utiliser l'opérateur d'entrée de ligne dans un contexte scalaire:
my $date = <$fh>;
Vous voulez probablement chomp les données trop pour se débarrasser de nouvelles fins de fin possibles. Même si vous ne pensez pas qu'un retour à la ligne final doit être présent parce qu'un autre programme a créé le fichier, quelqu'un qui regarde le fichier avec un éditeur de texte peut l'ajouter.
Bonne chance, :)
Ou l'utilisateur et PATH – Schwern
Merci :-) J'ai oublié d'inclure le chemin. Cela fonctionne! :-) – Cez