2010-02-09 2 views

Répondre

26

Plus que cela :) arrête vos problèmes de sécurité avant qu'ils ne le deviennent. Ce n'est pas une balle de sécurité bien sûr ... nous l'utilisions (il y a quelques années quand j'étais impliqué dans des projets Perl) dans n'importe quel script exposé en externe (ie toute application mod_perl) et nous l'avons trouvé très utile et fait notre politique. Il fait quelques vérifications et il est à portée de main .. (quoi que ce soit rend les choses automatisées)

Perl Security - perlsec le recommande fortement aussi:

Ce drapeau [mode Taint] est fortement recommandé pour les programmes de serveur et tout programme exécuté sur au nom de quelqu'un d'autre, comme un script CGI. Une fois que le mode taint est activé, il est activé pour le reste de votre script.

+6

Le mode de salissure est un outil de développement. Cela n'arrête ni n'empêche les problèmes de sécurité. Il vous montre où vous avez des problèmes, mais il dépend de vous pour les gérer correctement. –

+5

Ce n'est pas trompeur du tout.La vérification de la salissure n'augmente pas un peu votre sécurité. Je ne dis pas de ne pas l'utiliser. Ne pense pas que ça va te protéger. Il vous montre simplement où vous devriez envisager une protection. J'ai vu beaucoup de programmes «taint-safe» qui avaient toujours les mêmes vieux problèmes de sécurité des entrées non validées. –

+3

@briandfoy ... via l'infâme '$ safe = $ 1 si $ unsafe = ~ /(.*)/' –

17

Très certainement!

$ echo '`rm -rf /`' | perl -Te 'eval while <>' 
Insecure dependency in eval while running with -T switch at -e line 1, <> line 1.
+10

Hah. Vous êtes courageux si vous avez réellement couru cela. J'ai probablement passé 3 heures avant d'appuyer sur la touche Entrée pour m'assurer que -T était dans ma commande perl. – user198470

+2

Peut-être qu'il l'a couru comme utilisateur personne – Paul

+3

N'aurait rien fait de toute façon, 'man rm':' --no-preserve-root: ne traite pas '/' spécialement ' –

7

Je pense que le mode taint serait le mieux lorsque le nouveau code est en cours d'élaboration que tout le monde connaît.

Si le code de quelqu'un d'autre est mal écrit et que vous l'exécutez en mode Taint, perl mourra plutôt que d'effectuer quoi que ce soit par des règles d'altération.

En mode altération perl certains trous sont patchés mais pas tous. system ("$ unfiltered_user_input") va mourir mais Perl peut toujours écrire $ unfiltered_user_input data dans un fichier avec un nom fixe (parce que l'impression de données corrompues est considérée comme 'safe'), puis exécuter ce fichier avec system(). Mais rien ne peut tout vérifier.

Il ya un compromis là pour l'utiliser sur les applications héritées. Quand Perl trouve une opération dangereuse sur des données corrompues, il meurt - ce qui signifie que quelqu'un doit entrer et décider de ce que cela signifie pour dénouer les données, quelle expression rationnelle est nécessaire, avant que l'application ne soit à nouveau fiable.

Certaines personnes préféreraient insécurité, fiable, à faible coût (pour l'instant) à - sécurisé, cassé, besoin de trouver les développeurs. Pas que ce soit bon à long terme ... mais ce n'est pas inhabituel.

+0

Cet exemple d'exécution de' system() 'sur un fichier contenant des données obtenues d'un utilisateur est un bon. –

+10

Il existe également des avertissements d'altération (-t). Ils préviennent des mêmes choses mais ils n'arrêtent pas votre programme. Commencez avec ceux pour les programmes existants. –

13

Le chapitre "Techniques de programmation sécurisées" de Mastering Perl est presque entièrement consacré à la vérification des traces et à la façon dont vous devriez l'utiliser. Beaucoup de gens vous diront qu'il vous protège, mais ils mentent subtilement à ce sujet. C'est un outil de développement qui vous aide à trouver quelques (seulement quelques) points dans votre code où vous devez faire attention. Cela ne va pas résoudre tous vos problèmes de sécurité.

2

Oui, le mode d'altération est utile pour toutes les raisons mentionnées ci-dessus.

Un endroit où vous ne pouvez pas considérer des données corrompues est lors de l'interaction avec une base de données. Heureusement, DBI est capable d'empêcher l'entrée de données corrompues dans votre base de données et traite les données provenant de votre base de données comme étant corrompues, de sorte que vous ne pouvez rien faire de dangereux. Vous devez spécifiquement activer les options pour cela; ils sont désactivés par défaut. Voir the DBI docs pour plus.

Questions connexes