(De acuerdo, confieso por adelantado que, aunque estoy tratando de informarme sobre el estado actual de mi conocimiento sobre la seguridad de las aplicaciones web, es bastante superficial. Por lo tanto, aprecio su paciencia si la forma en que lo pregunto es un poco torpe.)
Hace unos días me estaba poniendo al día con algunas noticias sobre seguridad informática cuando encontré este artículo sobre un investigador / hacker de seguridad de hat hat que fue arrestado a principios de este mes por cargos relacionados a ingresar al sitio web de las elecciones del condado cuerpo en florida Desde un punto de vista técnico, parece que se produjo un compromiso cuando este tipo utilizó un ataque de inyección SQL contra una base de datos de inicio de sesión y logró robar la contraseña de texto simple (!) De un supervisor de elecciones del condado. Luego usó esas credenciales para iniciar sesión en el sistema de administración de contenido del sitio web, y eso fue todo.
Después de leer sobre esto, algo extraño me llamó la atención. Me di cuenta de que había un punto bastante fundamental sobre la naturaleza de estos robos de inyección de SQL ultra comunes de las bases de datos de contraseñas que realmente no entendía o no entendía. Eso es: ¿Por qué es posible incluso manipular una base de datos de inicio de sesión para revelar hashes de contraseña (y / o nombres de usuario, sales, o cualquier otra información relacionada con la autenticación) en primer lugar?
Puedo entender por qué la inyección SQL puede funcionar contra bases de datos en general; El trabajo común arquetípico de una base de datos es devolver información legible por el usuario almacenada en ella en respuesta a una consulta del usuario. Pero el trabajo de una base de datos de credenciales de inicio de sesión es muy diferente. En realidad, no requiere enviar información de autenticación almacenada fuera de la base de datos , sino que simplemente proporciona una respuesta al servidor web que transmite las credenciales proporcionadas por el usuario sobre si son válidas o no. (¿Verdad?)
Entonces, ¿por qué incluso usamos software de base de datos de gran potencia y consultas SQL para manejar las necesidades bastante limitadas de nombre de usuario y amp; contraseña de autenticación en absoluto? ¿Por qué no hay aplicaciones de base de datos de propósito limitado dirigidas específicamente a solo hacer lo que una base de datos de contraseñas debe hacer, en lugar de usar aplicaciones de propósito general que dejan mucho espacio para que ocurra la inyección de SQL? ¿Qué me estoy perdiendo?