[Perl] sobre móulos

Salvador Ortiz Garcia sog en msg.com.mx
Vie Ene 27 15:35:07 CST 2006


Feliz año nuevo, gusto da saber que la lista regresó con vida del
guadalupe-reyes :-)

Ok, a la materia.

Depender de que en el path de inclusión (@INC) está '.' es muy peligroso
además de que falla con facilidad.

Funciona si y solo si el script en cuestión está en el "current working
directory", ie lo ejecutas como ./miscript

Pero basta con que lo llames desde otro lado (via ruta completa o $PATH)
para que fracase rotundamente.

Además de que introduces una vulnerabilidad grave, pues basta con que un
usuario malintencionado cree un módulo con el nombre requerido en ese
otro lado, para que se regale un 'hook' en tu código del tamaño del
mundo.

Lo recomendable es combinar 'use lib' con el módulo FindBin.

#!/usr/bin/perl

use FindBind;
use lib "$FindBin::Bin";

Revisa la documentación correspondiente pues existen algunos detalles
finos en el asunto.

Saludos.



On Fri, 2006-01-27 at 12:34 -0600, Gunnar Wolf wrote:
> Gustavo Chain dijo [Fri, Jan 27, 2006 at 11:14:55AM +0000]:
> > Hola Lista, q tal todo.
> > 
> > Quería saber si era posible usar un modulo sin tener q instalarlo en el 
> > sistema, osea, llamarlo desde el mismo programa hacia una ruta 
> > especñifica, y así poder ejecutar el script en cualquier lado sin tener 
> > q instalar el módulo en cada máquina
> > 
> > Si es así, como ?
> 
> Primero que nada, recuerda que como parte del path de inclusión por
> default está . (el directorio actual), por lo que:
> 
> gwolf en mosca:/tmp$ cat  > Cosa.pm
> package Cosa;
> sub funcion {
>     print "Sirvo!\n";
> }
> 1;
> gwolf en mosca:/tmp$ cat > prueba.pl
> #!/usr/bin/perl
> use Cosa;
> Cosa::funcion;
> gwolf en mosca:/tmp$ chmod 755 prueba.pl 
> gwolf en mosca:/tmp$ ./prueba.pl 
> Sirvo!
> gwolf en mosca:/tmp$ 
> 
> Ahora, si quieres instalar tus módulos en algún lugar específico no
> contemplado en el path, usa "use lib":
> 
> gwolf en mosca:/tmp$ cd       
> gwolf en mosca:~$ cat > prueba2.pl
> #!/usr/bin/perl
> use lib qw(/tmp);
> use Cosa;
> Cosa::funcion;
> gwolf en mosca:~$ chmod 755 prueba2.pl 
> gwolf en mosca:~$ ./prueba2.pl 
> Sirvo!
> gwolf en mosca:~$ 
> 
> Saludos,
> 
-- 
Salvador Ortiz Garcia <sog en msg.com.mx>
Matías Software Group



Más información sobre la lista de distribución Perl