No implementes tu propio controlador de sesión. Use $ _SESSION , fue escrito y auditado por personas que comprenden muy bien la seguridad. Ni siquiera conozco las complejidades de cómo funciona el controlador de tu sesión, pero en función de la poca información que nos has proporcionado es inseguro .
La inyección SQL es útil para obtener datos de la base de datos. Nosotros HASH contraseñas porque en el caso de que un atacante obtenga esta información, se verán obligados a descifrar el hash antes de que sea útil. Sin embargo, en su caso, no importa que sea vulnerable a CWE-257 , el atacante simplemente puede sacar el ID de sesión de la base de datos y usarlo para autenticarse.
También podría obtener acceso de administrador porque no ha mencionado OWASP a9 - Insufficient Transport Layer Protection . También eres vulnerable a Clickjacking , cada aplicación web es predeterminada. CSRF o "sesión de montar" ya se mencionó.
Habilite los indicadores de seguridad "httponly", "secure". Puede hacer esto por $ _SESSION configurando PHP .
Una estrategia de defensa en profundidad es planificar el fracaso y limitar el acceso que tiene su administrador. No permitir la carga de archivos o la ejecución de código . Esta es la razón número 1 por la que las instancias de Wordpress se piratean, una vez que tiene administrador en un sitio de Wordpress, tiene ejecución remota de código en el servidor. Wordpress también implementó su propio controlador de sesión en un punto, y lo adivinaron, era muy inseguro.