Follow By Email

miércoles, 25 de enero de 2012

Seguridad para la web - Tips de ayuda !


   Hoy ocurrió una pequeña brecha de seguridad en al empresa a la cual le estoy prestando servicios de consultoría, y después de verificar y reforzar algunas cosas decidí compartir y debatir algunas buenas practicas de seguridad al momento de realizar desarrollos Web.

- Si vas a entregar permisos de escritura o ejecución procura habilitar solo una carpeta de tu servidor para tener mayor control sobre estos archivos. Además limita y valida los tipos y tamaños de archivos con funciones como getimagesize o fileinfo.

- Para los datos delicados siempre fabrica un archivo properties que contenga encriptación de datos

- Entrega los permisos básicos (mínimos) para el usuario de la BD

- Si usas algún CMS cambia los prefijos de las tablas. Los sistemas de gestión de contenido instalan tablas por defecto y al conocer los nombres de estas soy muy vulnerables a ataques de inyección SQL.

- Siempre valida los datos importantes en el servidor. Aun que también realicemos validaciones en el cliente.

- Protege las carpetas que contengan archivos delicados con la combinación htaccess y htpasswd (eso si, asegurare de dejar el archivo htpasswd fuera de la raíz del sitio). A proposito un muy buen tuto de cristalab que muestra la utilización de esta tecnica de encabezados: http://www.cristalab.com/tutoriales/proteger-carpetas-con-.htaccess-y-.htpasswd-c213l/ .

- Si usas plugins, librerías, frameworks, estándares, aplicaciones, etc. procura no manipular los archivos base para extender la funcionalidad de tu aplicación. Recuerda que siempre es necesario actualizar y muchas de las actualizaciones se deben a motivos de seguridad.

- No confíes en los datos que los usuarios envían. Trata siempre cualquier información que provenga desde fuera como un posible dato malicioso.

- Utiliza los nuevos estándares Web. Hay muchos tags y practicas Web que no son las correctas, es por eso que muchos navegadores están lentamente quitando soporte a algunas practicas e incorporando otras.

- Si el sitio contiene mucha información delicada utiliza el protocolo https y permite el acceso a este solo con ssh keys. Si quieres ingresar al sitio o a sus archivos utiliza algún cliente SSH y SFTP.

- Cuando desarrolles intranets intenta que estas en realidad funcionen a nivel interno de la corporación. Si existe alguna excepción utiliza VPN, o aún mejor utiliza Open VPN

- Y aun que suene obvio utiliza sistemas de captcha, quita los meta y utiliza contraseñas con seguridad fuerte.

Se que hay muchas mas buenas practicas de seguridad, pero me aburrí de redactar XD, así que si tienen algún dato rosa no duden en compartirlo.

PDTA: Algunos de los tips que entrego funcionan solo sobre PHP, pero cualquier lenguaje servidor tiene sus propias implementaciones.


Fuente: Felipe Campos Clarke - Ingeniero en Informática y Analista en Sistemas

miércoles, 18 de enero de 2012

Programación ágil - Metodos TDD, El libro - Prologo


   Erase una vez que se era, un lejano país donde vivían dos cerditos, Pablo y Adrián que, además, eran hermanos. Ambos eran los cerditos más listos de la granja y, por eso, el gallo Iván (el gerente de la misma) organizó una reunión en el establo, donde les encargó desarrollar un programa de ordenador para controlar el almacén de piensos. Les explicó qué quería saber en todo momento: cuántos sacos de grano había y quién metía y sacaba sacos de grano del almacén. Para ello sólo tenían un mes pero les advirtió que, en una semana, quería ya ver algo funcionando. Al final de esa primera semana, eliminaría a uno de los dos.

   Adrián, que era el más joven e impulsivo, inmediatamente se puso manos a la obra. "¡No hay tiempo que perder!", decía. Y empezó rápidamente a escribir líneas y líneas de código. Algunas eran de un reciente programa que había ayudado a escribir para la guardería de la vaca Paca. Adrián pensó que no eran muy diferentes un almacén de grano y una guardería. En el primero se guardan sacos y en el segundo, pequeños animalitos. De acuerdo, tenía que retocar algunas cosillas para que aquello le sirviera pero bueno, esto del software va de reutilizar lo que ya funciona, ¿no?.

   Pablo, sin embargo, antes de escribir una sola línea de código comenzó acordando con Iván dos cosas: qué era exactamente lo que podría ver dentro de una semana y cómo sabría que, efectivamente, estaba terminada cada cosa. Iván quería conocer, tan rápido como fuera posible, cuántos sacos de grano había en cada parte del almacén porque sospechaba que, en algunas partes del mismo, se estaban acumulando sacos sin control y se estaban estropeando. Como los sacos entraban y salían constantemente, no podía saber cuántos había y dónde estaban en cada instante, así que acordaron ir contabilizándolos por zonas y apuntando a qué parte iba o de qué parte venía, cada vez que entrara o saliera un saco. Así, en poco tiempo podrían tener una idea clara del uso que se estaba dando a las distintas zonas del almacén.

   Mientras Adrián adelantaba a Pablo escribiendo muchas líneas de código, Pablo escribía primero las pruebas automatizadas. A Adrián eso le parecía una pérdida de tiempo. ¡Sólo tenían una semana para convencer a Iván!
Al final de la primera semana, la demo de Adrián fue espectacular, tenía un control de usuarios muy completo, hizo la demostración desde un móvil y enseñó, además, las posibilidades de un generador de informes muy potente que había desarrollado para otra granja anteriormente. Durante la demostración hubo dos o tres problemillas y tuvo que arrancar de nuevo el programa pero, salvo eso, todo fue genial. La demostración de Pablo fue mucho más modesta, pero cumplió con las expectativas de Iván y el programa no falló en ningún momento. Claro,todo lo que enseñó lo había probado muchísimas veces antes gracias a que había automatizado las pruebas. Pablo hacía TDD, es decir, nunca escribía una línea de código sin antes tener una prueba que le indicara un error. Adrián no podía creer que Pablo hubiera gastado más de la mitad de su tiempo en aquellas pruebas que no hacían más que retrasarle a la hora de escribir las funcionalidades que había pedido Iván. El programa de Adrián tenía muchos botones y muchísimas opciones, probablemente muchas más de las que jamás serían necesarias para lo que había pedido Iván, pero tenía un aspecto "muy profesional".


martes, 17 de enero de 2012

¿Qué es un Cache y cómo funciona? - Eliax.com

   ¿Cuántas veces no han leído especificaciones en un CPU, una memoria, disco duro, o incluso en terminología en navegadores y aplicaciones web, en donde se refieren a un "Cache"?

   Cache es uno de esos términos que para el usuario técnico es una simpleza, pero para la persona común no familiarizada con el término es lo mismo que decir palabras mágicas en una película de Harry Potter. Cosas como que un disco duro tiene 16MB de cache, o que un CPU tiene 2MB de cache es algo que la mayoría de los consumidores no entiende, y por lo general simplemente siguen la regla que mientras mas grande es el cache mejor debe ser lo que uno está comprando (y esa regla en este caso es por lo general una buena regla a seguir, aunque no siempre como veremos).
   Así que veamos qué es este concepto en términos sencillos y fáciles de entender...

   Imagínate que trabajas en una central telefónica de un pequeño pueblo, en donde muchas personas llaman para preguntarte el número telefónico de algunos negocios (restaurantes, cines, tiendas de ropa, bancos, etc), y que lo único que tienes disponible para contestar es una de esas tradicionales guías telefónicas (un libro bastante pesado y de gran espesor).
   Una cosa que notarás en tu empleo, al cabo de poco tiempo, es que las personas tienden a preguntar con bastante frecuencia sobre un grupo en particular de negocios populares, por lo que para hacer tu trabajo mas eficiente, lo que empiezas a hacer es a copiar el número telefónico de esos negocios populares en un cuaderno aparte, organizados alfabéticamente.
   Ese cuaderno tiene quizás solo 4 o 5 páginas (versus las cientos de página de la guía original), pero sientes confianza en que en alrededor del 50% de los casos cada vez que te llaman esos números los puedes encontrar en esta pequeña guía, en donde puedes encontrar los números mas rápidamente.
Pues felicidades porque acabas de crear un cache.

martes, 3 de enero de 2012

Desarrollo Web y su gran gamma de opciones ...

   Desde hace muy un tiempo me he estado integrando en el ámbito de desarrollo web, un área fundamental para cualquier desarrollador. Pues me dí cuenta de la gran cantidad de posibilidades que existen a la hora de programar o diseñar un sitio web. Pues Internet y su estructura cambia de una manera exponencial y estar al tanto de las nuevas tecnologías es crucial, pues si te quedas atrás verás como los demás te quitan el espacio que sembraste.

  Comencé por saber HTML, un lenguaje estándar de la cual es la base para cualquier sitio web visualizado por algún navegador. Sin embargo HTML por si solo es demasiado básico para las demandas que tiene un usuario común, y de hay comienza la gamma de lenguajes que ofrecen ser parte de una "extensión de HTML", que actúan en servidores como también otros que actúan en navegadores...  pues existen muchas opciones ( gratuitas, gpl, para algunos servidores, para algunos navegadores, para sistemas operativos específicos, etc...). Me llamo mucho la atención PHP, un lenguaje que nos ofrece crear dinamismo en las páginas como también ASP.net que nos ofrece un servicio muy parecido pero solo pueden ser ejecutados en servidores con sistemas operativos microsoft y estos son un poco mas costosos que otros que funcionan con Linux.




  Luego de emprender un largo camino de las nuevas tecnologías, emprendí un viaje por la red y comencé a visualizar los distintos códigos de las páginas y sus tecnologías implementadas, descubriendo que los sitios más famosos usan siempre lo último. Google usa mucho jQuery (una librería de javaScript), Facebook está creada con php y tiene tecnologías bastante novedosas de las cuales una de ellas es la de interactuar a través de cliente - servidor ofreciéndonos notificaciones en tiempo real sin refrescar la página, el correo hotmail esta creada en asp. etc... 

  Luego de muchos tutoriales y explicaciones de cosas que muchas veces no nos damos cuenta pero que si nos proporcionan comodidad, indagué sobre los softwares que permiten desarrollar un sitio y pues existen una gran lista... Pues comenzaré por dreamweaver un programa de adobe que nos ofrece una amplio IDE de programación y de actualizaciones de desarrollo... el único problema es que es de pago (pero a eso quien le importa, si tenemos un buen keyGen). otro programas más simples y que gastan menos recursos de procesamiento y otros que nos ofrecen diseñar páginas en vez de programar como Artister. pero uno me llamo mucho la atención y en este me centraré porque lo encontré bastante completo y es WebMatrix, un software gratuito creado por microsoft, este nos proporciona administrarción del sitio( http , ftp, bd, etc..) y programación, pero una programación altamente amplia de la cual incluyen un sin número de lenguajes(propios de microsoft como también otros ampliamente usados (ajax, php, js, css...). además de ofrecer diseños en cms (Worpress, Joomla, Drupal, etc...) y también generar un servidor local para testiar el sitio.