Sanas prácticas para una programación confiable y sólida

Compártelo en
Me encuentro el día de hoy con Daniel Méndez, nuestro Chief Technology Officer (CTO) en Kriptos, conversando desde la bella ciudad de Cuenca.

Daniel tiene 30 años y ha trabajado en tecnología por aproximadamente 12 años. Estudió Ingeniería de Sistemas en la Universidad de Cuenca. Su pasión es seguir aprendiendo, por lo que luego de su Ingeniería, siguió sus Maestrías Online, la primera en la UNIR: Universidad Internacional de la Rioja en Aplicaciones Móviles y la segunda en la Escuela Superior De PNL de México donde siguió un Máster en Facilitación de Procesos de Cambio. Esta última es una carrera fuera de la rama de tecnología, sin embargo, se alinea muy bien al carácter de Daniel; a quién le encanta ayudar a las personas.

Damos inicio a esta entrevista y nos preguntamos sobre la manera más segura de desarrollar software.

 

Daniel, ¿Que se debe considerar para tener un código seguro?

Siempre pensar en el futuro, en todo lo que puede suceder mañana. ¿Qué pasa si mañana sucede esto o aquello?

Ser precavido, el código debe estar siempre preparado para soportarlo todo y así evitar problemas. El código debe ser muy sencillo de mantener; debe tener buena documentación en el mismo y aplicar criterios de mejores prácticas de sistemas exitosos.

 

¿Qué herramientas y metodologías utilizar?

En el caso de las herramientas, Daniel recomienda utilizar las versiones estables siempre. En ocasiones las personas prefieren utilizar versiones Alfa o Beta pero luego encuentran graves problemas en el camino.

Para proteger el código fuente ante ataques de Hackers, es recomendable implementar las siguientes normas en nuestros sistemas informáticos:

-OWASP, al menos las top 10 reglas básicas para sistemas web y para aplicaciones móviles. https://www.owasp.org/index.php/Top_10-2017_Top_10

-Cookies seguras, si se van a almacenar datos del usuario en el sistema web, se debe implementar los reglamentos GDPR y programar una cookie de forma segura, tal como lo indica OWASP. https://eugdpr.org/

-Sesiones seguras, no exponer datos sensibles (a menos que sea muy necesario) ni en cache, ni en sesiones. Este tipo de datos debe protegerse mediante un hash y eliminarlos en el menor tiempo posible. Recomendación: un sistema bancario debe eliminar todos los datos del usuario de la sesión, si el usuario no está usando el sistema por más de 5 minutos.

-Se debe implementar un Factor de doble autenticación, en sistemas que manejan muchos datos sensibles como sistemas bancarios. Al menos luego de hacer Login, pedirle al usuario que ingrese el OTP (One Time Password) que se le envió al correo electrónico o al teléfono mediante SMS.

-Verificar nuestro software: es necesario hacer una verificación de nuestro código utilizando herramientas gratuitas de OWASP para detectar las vulnerabilidades en el código fuente.

Si el sistema es un sistema transaccional, se deben realizar pruebas de estrés para detectar hasta que cantidad de carga está dispuesto a soportar el software.

Existen IDEs más seguros para el desarrollo de software. Generalmente, los más seguros son los IDEs privados en contraste al software libre. El software libre es increíble sin embargo, tiene varias  brechas de seguridad por ser código abierto que los programadores y hackers ya conocen, por así decirlo.  Esa es la debilidad de las herramientas libres. Yo recomiendo los siguientes IDEs privados:

-Visual Studio de Microsoft, el mejor IDE con el que he podido trabajar en toda mi vida profesional.

-IDEs de JetBrains, como el PyCharm, PhpStorm, etcétera. Son IDEs muy seguros y económicos.

A la hora de programar, es fundamental elegir el sistema operativo. Esto depende de las necesidades del producto, por ejemplo, en Kriptos nuestro agente es una aplicación 100% Windows por lo que estamos obligados a utilizar Windows para desarrollar. Sin embargo, en nuestros sistemas operativos tenemos normas generales para protegernos:

-Windows con licencia original, esto nos permite mantenernos actualizados con los últimos ‘releases’ de Microsoft y protegernos contra vulnerabilidades.

-Antivirus con licencia original, esto nos permite protegernos ante nuevas amenazas de virus que cada día nacen.

-En los navegadores utilizamos extensiones como el AdBlock para protegernos de propagandas con contenido peligroso.

-Si necesitamos desarrollar en Linux, el mejor sistema operativo y el más seguro para eso es CentOS. No es muy amigable a la vista, pero es muy seguro para desarrollar e incluso para usarlo de Servidor.

Finalmente, es de alta importancia mantener nuestro código fuente en algún repositorio confiable en la nube. Es una mala práctica que cada programador tenga su propia versión del código fuente. Esto puede ocasionar problemas graves a la larga. Yo recomiendo dos repositorios muy buenos y muy confiables:

-Team Fundation Server de Microsoft, cuentan con servicio en la nube y es excelente.

-Bitbucket de Atlasian, Kriptos utiliza este repositorio y es excelente muy recomendable.


¿Cómo equilibrar el tiempo y esfuerzo que debe poner un programador en la seguridad vs la velocidad?

Considero importante tomar en cuenta las siguientes recomendaciones:

-Si está desarrollando nuevos ‘features’ o atributos, tomarse 1 o 2 horas al día para revisar el código que va programando para detectar vulnerabilidades.

-Integrar un sistema de pruebas unitarias como mínimo; esto ayudará a realizar sus propias pruebas de forma más rápida. Puede aprender algo de TDD para ello.

-Integrar las recomendaciones de OWASP conforme va desarrollando, es una mala práctica hacerlo cuando el desarrollo está terminado.

-En caso de haber ‘bugs’ urgentes, detener las tareas actuales y concentrarse en los ‘bugs’.

-En caso de haber ‘bugs’ no urgentes, tomarse 1 hora al día para ir revisando esos ‘bugs’ y poder irlos solventando.

Finalmente, para tener mayor velocidad a la hora de desplegar el código fuente en los diferentes ambientes de pruebas o producción, es muy importante implementar Integración Continua en los repositorios de la nube en donde se actualiza el código fuente.


¿Qué cursos, certificaciones o normativas sugieres implementar?

Recomiendo la plataforma de Pluralsight ya que sus cursos enseñan contenido importante y relevante, justo lo que se necesita saber en tecnología. También, recomiendo realizar maestrías en el extranjero, ya que la cultura tecnológica en Europa y en Estados Unidos es más avanzada y la experiencia que se obtiene es mucho mayor.

Termino diciendo que es indispensable que todo líder y programador conozca las normativas actuales de seguridad y sus aplicaciones en el tipo de producto que se encuentren desarrollando.

 

_DSC0015

Artículos relacionados