- No solo permita SSL; no permitir no SSL. Fuera de https, todos los datos de autenticación y autorización son esencialmente completamente públicos (si no conoce la diferencia entre autenticación y autorización, definitivamente necesita leer sobre seguridad).
- Nunca muestre rastros de pila, mensajes de error de la base de datos, etc. al público. Si los incluye durante la depuración, diseñe en un “modo de depuración” para esto, que está desactivado de forma predeterminada. Idealmente, el usuario final ni siquiera debería poder decir en qué idioma / s está escrita su aplicación.
- Si tiene una API, dele un diseño claro de arriba hacia abajo para que no crezca de manera orgánica y desordenada con el tiempo, lo que hace que sea más difícil detectar los problemas de seguridad que aparecerán más adelante. Si usa REST como patrón de diseño, úselo de manera adecuada y consistente.
- Mantenga un número de versión claro para cada versión de su software, tal como lo ha hecho el software de escritorio compilado. Le ayuda a identificar exactamente cuándo surgió un problema. También puede usarlo para no permitir conexiones de personas que todavía usan una versión anterior si se descubre un problema de seguridad, lo que los obliga a actualizar.
- Incluya un “interruptor de apagado” para que pueda bloquear instantáneamente a todos los usuarios si descubre un problema de seguridad grave. Diseñe en un mensaje de error fácil de usar que los usuarios verán si habilita esto (no solo un error 500 del servidor).
Finalmente: considere no obligar a sus usuarios a elegir una contraseña, que la mayoría de ellos establecerá para ser la misma que en cualquier otro sitio. Simplemente deles una cookie y, si desean iniciar sesión desde un dispositivo diferente, envíeles un enlace por correo electrónico para iniciar sesión y obtener otra cookie. Esto es 2015 y prácticamente todos tienen su propio dispositivo.