{"id":1067,"date":"2014-07-16T15:40:55","date_gmt":"2014-07-16T21:40:55","guid":{"rendered":"https:\/\/www.lastdragon.net\/?p=1067"},"modified":"2014-07-16T15:58:22","modified_gmt":"2014-07-16T21:58:22","slug":"los-cgi-el-poder-de-proceso-para-las-webapps","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=1067","title":{"rendered":"Los CGI el poder de proceso para las webapps"},"content":{"rendered":"<p>Hay un poder oculto en las WebApps que se ha olvidado, los poderosos CGI, las WebApps basadas en lenguajes como PHP, C#, Java y otros no pueden competir contra un binario nativo, los CGI ofrecen la oportunidad de escribir aplicaciones en pr\u00e1cticamente cualquier lenguaje pero m\u00e1s importante que todo, estos lenguajes pueden ser C o cualquier otro compilado a c\u00f3digo nativo, si la WebApp tratara de c\u00e1lculos matem\u00e1ticos, lo ideal ser\u00eda hacerlo en lenguajes que compilen nativamente , tan r\u00e1pidos como C, Ensamblador, Pascal y otros menos como Perl o simplemente el Shell del sistema operativo, una WebApp escrita en BASH por ejemplo.<\/p>\n<p>Los CGI fueron olvidados por que son un poco m\u00e1s complicados de programar y usar que solo escribir el c\u00f3digo dentro del html como PHP y estos  requieren un tratamiento especial sin embargo usan los m\u00e9todos de entrada y salida standart para intercambiar datos esto permite que cualquier lenguaje que pueda manejar STDIN o el STDOUT pueda ser usado como CGI, los primeros formularios de internet no se hac\u00edan con PHP ni lenguajes comunes disponibles actualmente, se hac\u00edan con CGIs para este ejemplo voy a configurar la carpeta tradicional de los CGI la CGI-BIN, dentro de esa carpeta van los CGI y los binarios que se ejecutaran para crear WebApps como se hac\u00eda originalmente. Por supuesto en la d\u00e9cada de los 90\u2019s no se llamaban WebApps solo CGIs<\/p>\n<p>Para esta demostraci\u00f3n uso un Apache 2.4.7<\/p>\n<p>Por lo general el directorio o carpeta de CGI va junto con la de HTML, pero con las configuraciones de seguridad de mi servidor esto no podria ser, asi que la pondr\u00e9 en \/usr\/cgi-bin se declara en el virtualhost y se le da permiso al directorio donde se ejecutara los CGI de otra forma Apache mandaria un error de forbidden esto se debe a que no permite leer directorios que no est\u00e9n previamente autorizados en la propia configuraci\u00f3n de apache.<\/p>\n<p><code><directory \"\/usr\/cgi-bin\/\"><br \/>\n Order Deny,Allow<br \/>\n Allow from all<br \/>\n Options FollowSymLinks<br \/>\n AllowOverride AuthConfig Limit Options<br \/>\n Require all granted<br \/>\n<\/directory><br \/>\n<\/code><\/p>\n<p>Tambien se debe declarar que el directorio ser\u00e1 usado como repositorio de CGI en virtualhosting con ScriptAlias<\/p>\n<p><code>ServerAlias www.lastdragon.net<br \/>\nScriptAlias \/cgi-bin\/ \"\/usr\/cgi-bin\/\"<\/code><\/p>\n<p>De esta forma cada que en URL del navegador ponemos \/cgi-bin apache entiende que tiene que ir a buscar en \/usr\/cgi-bin<\/p>\n<p>Tambien debe cargarse el modulo de CGI<\/p>\n<p><code>LoadModule cgi_module modules\/mod_cgi.so<\/code><\/p>\n<p>Estos pasos son espec\u00edficos para las versiones Apache 2.4.x, anteriormente incluso era m\u00e1s f\u00e1cil pero dudo mucho que compilen versiones viejas si esta disponible las actuales. <\/p>\n<p>A partir de ahora Apache puede de manejar CGIs, Apache provee a los CGI por medio de standat input o variables de entorno la informaci\u00f3n que viene del exterior, muchas de las variables que usan en PHP en realidad no son de PHP son de Apache<\/p>\n<p>Ejemplo de un CGI hola mundo escrito en BASH<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/cgi\/hola.jpg\" alt=\"\" \/><\/p>\n<p>N\u00f3tese que he dejado 2 l\u00edneas en blanco, en un CGI son obligatorias o habr\u00e1 un error 500 en el servidor web<\/p>\n<p>Ahora manipulando m\u00e9todos GET con un Shell BASH<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/cgi\/get.jpg\" alt=\"\" \/><\/p>\n<p>Ahora un sencillo programa escrito en C<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lastdragon.net\/misarchivos\/cgi\/saludos.jpg\" alt=\"\" width=\"425\" height=\"350\" \/><br \/>\n<a href=\"https:\/\/www.lastdragon.net\/misarchivos\/cgi\/saludos.jpg\">Ver mas grande<\/a><\/p>\n<p>En pr\u00f3ximos art\u00edculos podr\u00eda incluir ejemplos para manejo de datos y hacerlo con binarios escritos en C u otros lenguajes como pascal, pero como ya seguro piensas incluso con CGI es posible manejar bases de datos con las librer\u00edas de C<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hay un poder oculto en las WebApps que se ha olvidado, los poderosos CGI, las WebApps basadas en lenguajes como PHP, C#, Java y otros no pueden competir contra un binario nativo, los CGI ofrecen la oportunidad de escribir aplicaciones en pr\u00e1cticamente cualquier lenguaje pero m\u00e1s importante que todo, estos lenguajes pueden ser C o&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1067","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1067"}],"version-history":[{"count":3,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1067\/revisions"}],"predecessor-version":[{"id":1070,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/1067\/revisions\/1070"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}