Protege tus Scripts de sitios no autorizados
Christian Gustavo Riva
Una de las ventajas de los
scripts CGI es que puedes configurar sus variables al momento de llamarlos
(script.cgi?variable=valor).
Esta posibilidad te permite,
entre otras cosas, seleccionar ante cada ejecucion del mismo un email donde
deberan ser enviados determinados resultados, o la direccion Web donde
se redireccionara al usuario una vez concluido el proceso.
Hacer uso de estas caracteristicas
te permitira, por ejemplo, alojar tan solo una copia de tu script en un
servidor en particular, y acceder al mismo desde distintos sitios Web,
pudiendo incluso ofrecer la funcionalidad del mismo a tus clientes y/o
asociados sin necesidad de instalar una copia del script en sus servidores.
Aplicaciones que aprovechan
esta posibilidad son los procesadores de formularios (aceptar resultados,
enviarlos a un email, y luego redireccionar hacia una pagina de agradecimiento),
los scripts utilizados para Recomendar una pagina Web (peticion de los
emails, envio de la invitacion, y redireccionar al usuario), etc.
El problema de utilizar
este modelo abierto de diseño es que asi como tu y tus clientes
pueden acceder al script enviandole tan solo un par de variables para su
personalizacion, cualquier otro Webmaster podra hacer lo mismo sin tu autorizacion
y consumiendo los recursos de tu servidor.
Para evitar esto y proteger
nuestros scripts, haremos uso de la variable de entorno HTTP_REFERER,
la cual contiene la direccion Web desde donde el script esta siendo llamado.
En caso de que la direccion
de origen nos sea desconocida, redireccionaremos al cliente hacia una pagina
destinada a tal fin.
Incluso esta misma proteccion
nos servira para que el script evite hacer lo que debe si esta siendo llamado
por los llamados "Spiders" o "Robots", utilizados por los directorios al
momento de indexar nuestra pagina Web, ya que estos se cuelgan de todo
enlace que encuentren en nuestra pagina y pertenezcan a nuestro dominio,
incluidos los scripts cgi.
Las siguientes lineas de
codigo te mostraran como puedes implementar esta funcionalidad en cualquiera
de tus scripts, agregandolas al inicio de los mismos.
Recuerda que el codigo es
para uso libre y su finalidad es introducirte en los conceptos que trata
y animarte a que experimentes por tu cuenta.
Si publicas u ofreces a
terceros una version modificada del mismo, no olvides mencionar al autor
original como figura en su cabecera.
PROTECCION.PL
###################################
# (C) 2001
Christian Gustavo Riva #
# https://www.programasprogramacion.com
#
###################################
#!/usr/bin/perl
## Cargamos
en la matriz los dominios de los sitios
## a los cuales
les daremos el visto bueno para
## continuar
ejecutando el script:
my @SitiosAutorizados
= ( "www.programasprogramacion.com",
"63.95.137.150",
"www.fonomax.com"
);
## Por omision,
cancelamos el uso del script:
my $Cancelar
= 1;
## Tomamos
la direccion Web desde la cual el
## script
esta siendo ejecutado:
my $Origen
= $ENV{'HTTP_REFERER'};
## Definimos
la pagina Web hacia donde redireccionaremos
## al cliente
si proviene de un sitio no autorizado:
my $PaginaError
= "https://www.programasprogramacion.com/error.htm";
## Recorremos
uno por uno los items de la matriz:
foreach (@SitiosAutorizados)
{
## La direccion
de origen contiene en su sintaxis
## a alguno
de los dominios autorizados?
## Si si,
cancelamos y salimos del foreach:
if( $Origen=~/$_/i
) { $Cancelar=0; last; }
}
## No fue reconocido
el dominio de origen?
## Redireccionamos
al cliente hacia la pagina predeterminada:
if($Cancelar)
{ print "Location: $PaginaError\n\n"; exit; }
## Y aqui continua
el codigo natural de tu script
## con la
seguridad de que esta siendo corrido desde
## un sitio
autorizado para hacerlo.