Técnicas de Desarrollo Seguro
Validación de entrada
- Verificar que el tipo de dato introducido coincide con el dato que esperamos.
- Verificar que se ha introducido información en aquellos casos que sea obligatorio.
- Verificar el contenido de la información introducida en busca de estructuras que puedan romper nuestro código.
Advertencias del compilador
- Verificar que no existen.
- Solucionar todos los conflictos antes de pasar el programa a producción.
Usar políticas de seguridad
- Aplicar niveles de acceso a las secciones de la aplicación que así lo requieran.
Sencillez
- Evitar estructuras de datos complejas.
- Evitar clases y métodos complejos.
- Cada clase debe tener una única funcionalidad.
- Cada método debe tener una única funcionalidad.
- Los métodos deben ser de reducido tamaño.
Denegar acceso por defecto
- Aplicar permisos partiendo de la negación de todos los permisos.
- Conceder permisos únicamente a los usuarios que tengan derecho a dicho permiso.
Sanear datos
- Antes de pasar datos a otro sistema verificar el contenido de los mismos.
- Escapar caracteres especiales antes de almacenar en bases de datos.
Aplicar capas de seguridad
- Estructurar la aplicación en capas
Usar técnicas que garanticen la calidad
- Realizar test de aplicación
- Auditar el código fuente
Estándar de codificación segura - Patrones de diseño
Prácticas de Desarrollo Seguro
Añadir trazas al código
- Logs que informen de los errores que se pueden ir produciendo
Eliminación del código muerto
- Verificar las secciones de código que no se usan en el programa para eliminarlas.
- No incluir clases que no se usan
- No declarar variables que no se utilicen
Independencia de la base de datos
- Programar usando alguna librería que permita cambiar de base de datos sin que el código sufra alteración alguna.
Alto rendimiento
- Realizar pruebas de carga
- Realizar pruebas de uso de recursos
Limitar el uso de objetos mutables
Limitar la herencia de clases
Limitar el uso de variables y métodos públicos
- Exponer únicamente los métodos y variables estrictamente necesarios para el desempeño de la funcionalidad de la clase.
Ayudar al recolector de basura
- Establecer a null aquellas variables que sepamos que no se van a volver a usar
- Cerrar las conexiones de forma manual
- Destruir los objetos de forma manual
Uso de bloques try/catch de forma consciente
- Controlar todas las excepciones que puedan aparecer en una aplicación
- Dar un tratamiento adecuado a cada tipo de excepción
- Registrar los errores para ayudar con el proceso de detección de fallos
- Limitar la información que se muestra al usuario sobre la excepción ocasionada
Hacer un uso responsable de la serialización y deserialización
- Evitar serializar datos sensibles
Limitar el uso de librerías escritas en otros lenguajes
Qué cursos recomendaría tomar, en platzi, para profundizar más en el desarrollo seguro?
Muchas gracias.
No
ᵃ