Sunteți pe pagina 1din 5

CGI

Interfaz de entrada comn (en ingls Common Gateway Interface, abreviado CGI) es una importante tecnologa de la World Wide Web que permite a un cliente (navegador web) solicitar datos de un programa ejecutado en un servidor web. CGI especifica un estndar para transferir datos entre el cliente y el programa. Es un mecanismo de comunicacin entre el servidor web y una aplicacin externa cuyo resultado final de la ejecucin son objetos MIME. Las aplicaciones que se ejecutan en el servidor reciben el nombre de CGIs. Las aplicaciones CGI fueron una de las primeras prcticas de crear contenido dinmico para las pginas web. En una aplicacin CGI, el servidor web pasa las solicitudes del cliente a un programa externo. Este programa puede estar escrito en cualquier lenguaje que soporte el servidor, aunque por razones de portabilidad se suelen usar lenguajes de script. La salida de dicho programa es enviada al cliente en lugar del archivo esttico tradicional. CGI ha hecho posible la implementacin de funciones nuevas y variadas en las pginas web, de tal manera que esta interfaz rpidamente se volvi un estndar, siendo implementada en todo tipo de servidores web.

A continuacin se describe la forma de actuacin de un CGI de forma esquemtica: 1. En primera instancia, el servidor recibe una peticin (el cliente ha activado un URL que contiene el CGI), y comprueba si se trata de una invocacin de un CGI. 2. Posteriormente, el servidor prepara el entorno para ejecutar la aplicacin. Esta informacin procede mayoritariamente del cliente. 3. Seguidamente, el servidor ejecuta la aplicacin, capturando su salida estndar. 4. A continuacin, la aplicacin realiza su funcin: como consecuencia de su actividad se va generando un objeto MIME que la aplicacin escribe en su salida estndar. 5. Finalmente, cuando la aplicacin finaliza, el servidor enva la informacin producida, junto con informacin propia, al cliente, que se encontraba en estado de espera. Es responsabilidad de la aplicacin anunciar el tipo de objeto MIME que se genera (campo CONTENT_TYPE).

Programacin de un CGI Un programa CGI puede ser escrito en cualquier lenguaje de programacin que produzca un fichero ejecutable. Entre los lenguajes ms habituales se encuentran: C, C++, Perl, Java, Visual Basic... No obstante, debido a que el CGI recibe los parmetros en forma de texto ser til un lenguaje que permita realizar manipulaciones de las cadenas de caracteres de una forma sencilla, como por ejemplo Perl. Perl es un lenguaje interpretado que permite manipulaciones sencillas de ficheros y textos, as como la extraccin y manipulacin de cadenas de caracteres, unidas a unas bsquedas rpidas y fciles.

Algunos errores en aplicaciones CGI


Mensajes reportando un Error 500 o Error Interno en el Servidor (Internal Server Error) puden ser causados por varios posibles problemas, como por ejemplo: Cargar el archivo en Forma binaria en lugar de en caracteres ASCII ASCII: A la hora de cargar o subir un programa CGI al servidor donde va a ejecutarse, hay que prestar especial atencin a la forma de envo de los archivos. Por ser el cdigo de un programa CGI en forma de caracteres de texto, es necesario enviarlo en forma ASCII. Enviarlo en forma BINARIA causar un Error 500 pues el intrprete encontrar errores de sintaxis. Permisos de ejecucin Incorrectos: Para que un programa corra, los permisos deben de estar de acuerdo para que sea ejecutado. Recuerde que los permisos se dan por nmeros, siendo los primeros del administrador, los segundos de los usuarios y los terceros globales.

Objeto no encontrado (ERROR 404) El famoso Error 404 es el de Objeto no encontrado. As como fcilmente nos topamos con un error similar de Archivo no encontrado en documentos HTML, as mismo se pueden encontrar dentro de programas CGIs por la misma razn. La solucin a este problema es de revisar el URL, y la locacin del archivo para asegurarse que el URL realmente apunta hacia el lugar que se cree.

El documento no contiene ninguna informacin (Document Contains No Data) El error en ingls Document contains no data es un error que se da en los navegadores. Este error da a entender que el programa no envi el content-header adecuado. En otras palabras, que envi una informacin que no est descrita y por lo tanto que no puede ser manejada. Las posibles explicaciones para este error son: Error en el cdigo Tiempo fuera en el servidor Falta de produccin Errores de conexin en la red o fallas del servidor

SQL Injection
SQL Injection o Inyeccin SQL es un mtodo de infiltracin de cdigo intruso que se vale de una vulnerabilidad informtica presente en una aplicacin en el nivel de validacin de las entradas para realizar consultas a una base de datos. El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, cdigo SQL. Es, de hecho, un error de una clase ms general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programacin o script que est embebido dentro de otro. Se conoce como Inyeccin SQL, indistintamente, al tipo de vulnerabilidad, al mtodo de infiltracin, al hecho de incrustar cdigo SQL intruso y a la porcin de cdigo incrustado.

Descripcin de SQL Injection


Se dice que existe o se produjo una inyeccin SQL cuando, de alguna manera, se inserta o "inyecta" cdigo SQL invasor dentro del cdigo SQL programado, a fin de alterar el funcionamiento normal del programa y lograr as que se ejecute la porcin de cdigo "invasor" incrustado, en la base de datos. Este tipo de intrusin normalmente es de carcter malicioso, daino o espa, por tanto es un problema de seguridad informtica, y debe ser tomado en cuenta por el programador de la aplicacin para poder prevenirlo. Un programa elaborado con descuido, displicencia o con ignorancia del problema, podr resultar ser vulnerable, y la seguridad del sistema (base de datos) podr quedar eventualmente comprometida. La intrusin ocurre durante la ejecucin del programa vulnerable, ya sea, en computadores de escritorio o bien en sitios Web, en ste ltimo caso obviamente ejecutndose en el servidor que los aloja.

Algunas formas de evitar la Inyeccin SQL

Ruby on Rails
En el framework Ruby on Rails (RoR), las consultas son verificadas automticamente por cualquiera de los mtodos de bsqueda incluidos. Por ejemplo: Project.find(:all, :conditions => ["name = ?", params[:name]]) # o bien Project.find(:all, :conditions => {:name => params[:name]}) La nica forma de que un usuario mal intencionado pueda usar una inyeccin de SQL en RoR es que mediante cdigo se transforme la variable a tipo string y se utilice como argumento de la bsqueda directamente. Por ejemplo: # NO SE DEBERA HACER ESTO Project.find(:all, :conditions => "name = '#{params[:name]}'")

Perl
En lenguaje Perl DBI, el mtodo DBI::quote filtra los caracteres especiales (asumiendo que la variable $sql contiene una referencia a un objeto DBI): $query = $sql->prepare ( "SELECT * FROM usuarios WHERE nombre = " . $sql->quote($nombre_usuario) ); O tambin se puede usar la caracterstica placeholder (con comillado automtico) como sigue: $query = $sql->prepare("SELECT * FROM usuario WHERE nombre = ?"); $query->execute($nombre_usuario);

PHP
En el lenguaje PHP, hay diferentes funciones que pueden servir de ayuda para usar con distintos sistemas de gestin de bases de datos. Para MySQL, la funcin a usar es mysql_real_escape_string: $query_result = mysql_query("SELECT * FROM usuarios WHERE nombre = \"" . mysql_real_escape_string($nombre_usuario) . "\"");

Java
En lenguaje Java, se puede usar la clase PreparedStatement En lugar de: Connection con = (acquire Connection) Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';"); se puede usar parametrizacin o escape de variables, como se indica en los siguiente apartados.

S-ar putea să vă placă și