La seguridad es algo subestimado en el desarrollo de aplicaciones y a veces solo hasta que sufrimos un ataque le damos importancia. Existen unas bases o reglas fundamentales que podemos seguir todo el tiempo para solventar los riegos básicos que pueden tener nuestras aplicaciones.
1. Mantener dependencias actualizadas
Sea lo que estemos usando, una librería, framework o componente para desarrollar nuestras aplicaciones debemos tratar de usar la versión mas reciente y tener muy claros el soporte de esos recursos para el futuro. Si estamos usando por ejemplo .NET Framework, Django o Node.js podemos mantener el código y tratar de actualizar a la versión reciente mas estable teniendo en cuenta las implicaciones que esto conlleva (Como los break changes). Mantener actualizado nuestro código no es opcional.
2. Administración de secretos
Ya sea para conectarnos a una base de datos, manejar un Token, una SecretKey para encriptar o un código especifico de permisos, debemos tener en cuenta como administramos estos datos que representan un riesgo para la seguridad.
Algunas buenas prácticas son:
- No hacer commit de los archivos de configuración con estos datos al repo
- Utilizar variables de entorno asignándolas por línea comando
- Utilizar servicios para manejo de secretos como Azure Key Vault O por ejemplo la sección de secretos en Github (Secrets in settings)
3. Evitar Cuentas Compartidas
Algo bastante común es crear una cuenta Admin que se comparte entre diferentes usuarios para realizar cambios bastante importantes en los datos. Debemos evitar compartir esto datos empezar a crear credenciales para cada usuario donde ellos asuman la responsabilidad de estas cuentas y también permitan hacer tracking de los cambios. También es importante crear una buena política para las contraseñas para que sean seguras, expiren cada cierto tiempo y si es posible habilitar autenticación en 2 pasos
4. Manejo de permisos y roles:
“Un gran poder conlleva una gran responsabilidad” Como humanos cometemos errores todo el tiempo y entre mas permisos y accesos tengamos la posibilidad de errores se incrementa. Es muy importante realizar una excelente asignación de roles a los usuarios y validar cada uno de ellos dentro del backend para habilitar quien puede o no acceder a un recurso.
5. Evitar comportamientos riesgosos
En muchas situaciones vamos a estar corriendo para entregar algo o debemos solucionar algo lo mas pronto posible por su impacto, sin embargo, no podemos dejar que este tipo de situaciones creen escenarios donde se ponga en riesgo los datos, la seguridad o la integridad de nuestras aplicaciones.
Algunas buenas prácticas son:
- Mantener siempre el proceso de calidad sin importar la situación
- Implementar CI/CD para automatizar los procesos de despliegue y detectar errores rápidamente
- Hacer monitoreo continuo de nuestras Apps