Variables de entorno y CGI

 Las siglas CGI (Common Gateway Interface) significan Interfaz de entrada común, y definen un estándar usado para que los usuarios web puedan intercambiar datos con una aplicación alojada en un servidor web. A continuación un buen ejemplo de aplicación que usa el estándar CGI:

 Fulanito está buscando en su navegador web una farmacia cercana, y para ello introduce los datos de su domicilio en un formulario y pulsa el botón enviar. La aplicación CGI (que así la llaman por usar este estándar) que se encuentra alojada en el servidor web recibe la solicitud de fulanito, luego hace una consulta a una base de datos basándose en ella y envía a fulanito una web con los resultados perfectamente expuestos y ordenados.

 Puedes escribir aplicaciones CGI si desarrollas en C, C++, Java, Visualbasic, C#, Perl... ¡casi en cualquier lenguaje de programación!. Y ahora viene lo interesante para la seguridad informática: las variables de entorno de una aplicación CGI. A continuación las puedes ver expuestas tal y cual las numera Wikipedia. Es posible conocer el puerto de acceso o el protocolo usado gracias a ellas, y las tres últimas contienen información del servidor, que es lo primero que un hacker buscará al realizar un ataque web.

 Variables de entorno que se intercambian de cliente a CGI:
 QUERY_STRING: Es la cadena de entrada del CGI cuando se utiliza el método GET sustituyendo algunos símbolos especiales por otros. Cada elemento se envía como una pareja Variable=Valor. Si se utiliza el método POST esta variable de entorno está vacía.
 CONTENT_TYPE: Tipo MIME de los datos enviados al CGI mediante POST. Con GET está vacía. Un valor típico para esta variable es: Application/X-www-form-urlencoded.
 CONTENT_LENGTH: Longitud en bytes de los datos enviados al CGI utilizando el método POST. Con GET está vacía.
 PATH_INFO: Información adicional de la ruta (el "path") tal y como llega al servidor en el URL.
 REQUEST_METHOD: Nombre del método (GET o POST) utilizado para invocar al CGI.
 SCRIPT_NAME: Nombre del CGI invocado.
 SERVER_PORT: Puerto por el que el servidor recibe la conexión.
 SERVER_PROTOCOL: Nombre y versión del protocolo en uso. (Ej.: HTTP/1.0 o 1.1)


 Variables de entorno que se intercambian de servidor a CGI:
 SERVER_SOFTWARE: Nombre y versión del software servidor de www.
 SERVER_NAME: Nombre del servidor.
 GATEWAY_INTERFACE: Nombre y versión de la interfaz de comunicación entre servidor y aplicaciones CGI/1.12.