Para detectar datos sucios, podemos utilizar esta función (sugerida en [6]):
sub is_tainted {
return ! eval { join ('', @_), kill 0;
1;
}}Podemos también utilizar el módulo taint, disponible en el CPAN [1] de la siguiente manera:
use Taint;
warn ``Datos sucios'' if tainted ($var1,@var2, $3var3, %var4);
Evitando así posibles caídas del programa.
Hay ciertos valores que siempre estarán sucios, pues provienen del mundo externo. Por ejemplo, el path de ejecución ($ENV{PATH} es heredado, y Perl no tiene manera de saber si éste es seguro. Cualquier programa externo que ejecutemos desde Perl (con system(), exec, qx, comillas inversas, etc.) requiere que $ENV{PATH} esté limpio para permitir su ejecución.