Soy un arquitecto de seguridad, y estoy acostumbrado a definir la seguridad del proyecto como una especificación que se lleva a cabo por otros. Recientemente me encargaron de enseñar a los nuevos programadores cómo diseñar y programar utilizando los principios de "Asegurar por diseño" (y en un futuro próximo "Privacidad por diseño"). Tengo 30-45 minutos (sí, lo sé), y la conversación debe ser independiente del lenguaje. Esto significa que debo presentar reglas procesables que puedan ser aplicadas por los desarrolladores web, los desarrolladores de aplicaciones y los desarrolladores de infraestructura.
Se me ocurrieron 5 reglas básicas y un suplemento:
- No confíe en ninguna entrada interna / externa (cubre saneamiento, desbordamientos de búfer, etc.)
- Privilegio mínimo para cualquier entidad, objeto o usuario
- falla "sin privilegios"
- Seguro, incluso si el diseño es conocido / público
- Regístrese para que alguien que no esté familiarizado con el sistema pueda auditar cada acción
Suplemento: si viola una Regla, demuestre que la mitigación puede sobrevivir a los futuros programadores que agreguen funcionalidad.
Cada una de esas reglas se puede aumentar con ejemplos de cualquier idioma o aplicación, para obtener orientación específica. Creo que esto maneja la mayoría de los principios generales de "Secure by Design" desde una perspectiva de alto nivel. ¿Me he perdido algo?