Publicidad
publicidad

Inicio->Artículos->Seguridad CGI
Seguridad en los CGI

En este articulo, vamos a estar tocando un tema muy importante para los programadores y webmasters: la seguridad en los scripts CGI. En este articulo NO se darán todos los problemas y soluciones para la seguridad en el CGI, se mostrará algunas de la varias cosas que nos podrían hacer y algunos trucos para que no nos tomen por sorpresa. Si estas leyendo este articulo, voy a dar por hecho que sabes que es el CGI y como programarlo. El lenguaje que usaremos como ejemplo para este articulo es Perl, porque es el lenguaje que la mayoría de los proveedores de web gratis soportan.

Primero veamos, como podrían ser peligrosos estos scripts para nosotros. Como veras el CGI como dice su nombre (Common Gateway Interface) es un interfase común de entrada, por lo tanto es una puerta abierta a nuestro servidor, y de nosotros depende ponerle la debida cerradura. Veamos un pequeño ejemplo. En un guest-book le damos al usuario la oportunidad de dejarnos un poco de texto que se grabara en una página html o de texto. Y luego cualquier visitante de la página podrá ver el guest-book. Todo va bien mientras el usuario ponga todos sus datos como deben ser. Pero digamos que nuestro visitante en ves de su nombre pone <!--#include file="/etc/passwd"--> esto le devolvería el password de nuestra página o si pone <!--#exec cmd="rm -rf /"--> esto borraría todo nuestro directorio. Ese es solo un pequeño ejemplo, hay muchas formas más en las que cracker te podría arruinar la vida.

Pero por suerte para nosotros, en la vida no solo existen problemas, también existen soluciones. La solución es simple, solo hay que recordar una sola cosa: "Nunca confíes en la entrada del usuario". Recuerda esto siempre, grábatelo en la cabeza, repítelo al levantarte y hasta sueña con esa frase y tus scripts serán seguros. También chequea siempre que la web desde donde está siendo ejecutado el script sea la tuya, porque también podrían bajarse la forma e intentar correrla desde sus PC modificándola lo suficiente para que cause destrozos o simplemente usar el script para enviar correo que tu solo hiciste (y tanto te costo) para enviar correo desde sus páginas. Para hacer eso solo tienes que chequear la variable de entorno HTTP_REFERER. Ejemplo.:

if ($ENV{'HTTP_REFERER'} ne 'http://www.mipagina.com'){
print <<FIN;
Content-type: text/html

<html>
<head>
<title>Error de referrer</title>
</head>
<body>
Esta vez no te salió amigo
</body>
</html>
FIN
exit;
}

Esto provocaría que si el HTTP_REFERER no es igual http://www.mipagina.com el programa nos devuelva una página de respuesta que diga "Esta vez no te salió amigo", es muy importante poner el exit al final, porque sino el programa seguirá su ejecución y de todas formas hará lo que el cracker quiere. La solución mas común y simple para que no pongan SSI (server side include), es simplemente remover los <> de todos los campos de la forma, esto se puede hacer fácilmente con la función  "buscar y remplazar" de Perl. Ejm.:

$campo =~ s/<|>//g;

Un buen consejo es chequear que cada campo contenga los que tenga contener. Si en un campo de la forma, el usuario, tenía que insertar un e-mail, chequea por todos los medios que el valor de ese campo sea un e-mail. Esto incluso lo podrás hacer mediante java script con la función indexOf().

Espero que esto te ayude a programar mejores y mas seguros scripts CGI. Para saber mas puedes visitar el Tutorial de la seguridad en CGI (Inglés).

Este articulo puede ser reproducido por cualquier medio
siempre y cuando se mencione la fuente y el autor.

Valid XHTML 1.1! Valid CSS!