Soy un estudiante de ciencias de la computación que busca expandir una aplicación web ya desarrollada para usar la arquitectura multiusuario. Teniendo en cuenta que estoy lejos de ser un experto en seguridad, ¿qué precauciones puedo tomar para que mi aplicación sea lo más segura posible? Así es como he estado pensando en hacerlo, la mayoría basada en este artículo de msdn: enlace
Framework
Django
Esto es lo que solía desarrollar el software y como lo uso exclusivamente es ORM, debería estar bien protegido contra las inyecciones de SQL. Las contraseñas están en hash y todas las formas están protegidas por CSRF. ¿Estoy pensando en prohibir de alguna manera a los usuarios usar contraseñas débiles, ideas? ¿Qué otras precauciones debo tomar?
Capa de base de datos
Base de datos compartida, un esquema por arrendatario
Decidí seguir con esta solución porque aún así me brinda una buena seguridad ("grado moderado de aislamiento lógico de los datos") y no tengo que cambiar mucho mi código. Un inquilino puede identificarse únicamente desde el subdominio, por ejemplo, tenant1.website.com. Simplemente puedo decirle a la base de datos que use el esquema tenant1. Aquí no sé si debo crear un usuario de base de datos para cada uno de los inquilinos, el artículo llama a esto como "una combinación de la suplantación de identidad y los enfoques de subsistemas de confianza". Básicamente, crea un usuario para cada inquilino que tiene permisos solo en ese esquema. ¿Esto tiene sentido? ¿Dónde almacenaría la contraseña para cada usuario?
Cifrado simétrico para datos confidenciales
En realidad no almaceno ninguna información importante como los números de tarjetas de crédito, pero hay un par de campos que estarían bien si estuvieran un poco más seguros. Los inquilinos almacenarán informes que no deberían ser visibles para sus competidores. Como estos campos tendrán un gran volumen de texto (máx. 70000 caracteres), estaba pensando en utilizar el cifrado simétrico (AES-128) en estos campos. ¿Está bien si todos los inquilinos comparten la misma clave? ¿Puedo almacenar la clave en el código fuente?
Misceláneo
Certificado SSL comodín
Como todos los inquilinos estarán en el mismo "servidor" (cloud: amazon ec2), con cada inquilino en su propio subdominio, debería estar bien usar certificados comodín, ¿verdad? Estoy pensando en RapidSSL ya que nuestro presupuesto es muy ajustado (edición: al principio probablemente solo sea una instancia).
¿Hay alguna otra cosa que haya estado olvidando completamente?