Validación de credenciales: lógica en la aplicación frente a la base de datos

2

estoy estudiando

Seguridad de aplicaciones web, una guía para principiantes Libro en rústica - 3 de noviembre de 2011 por Bryan Sullivan (Autor), Vincent Liu (Autor)

En las páginas 69, "Validación de credenciales", dicen que puedes validar credenciales basadas en

  1. Lógica de comparación en la aplicación con contraseñas de texto simple
  2. Lógica de comparación en base de datos con contraseñas de texto simple ....

No puedo entender la diferencia entre la lógica en la aplicación frente a la base de datos.

El texto de "Lógica de comparación en la aplicación ..." dice:

  

La aplicación envía una solicitud (por ejemplo, consulta SQL o consulta LDAP)   a la base de datos de back-end para recuperar el registro asociado con el   nombre de usuario ...

El texto de "Lógica de comparación en la base de datos ..." dice:

  

Esta técnica consiste en crear una consulta SQL o una solicitud LDAP para el   sistema back-end con una declaración condicional que solicita el back-end a   devolver cualquier registro con campos coincidentes que correspondan a la   nombre de usuario suministrado y la contraseña suministrada

No puedo entender la diferencia entre los dos. Creo que la aplicación también crea una consulta SQL o una solicitud LDAP al sistema de fondo con una declaración condicional.

¿Cómo visualizo esto? Gracias!

    
pregunta Glowie 01.12.2014 - 20:35
fuente

3 respuestas

2

Piénsalo de esta manera:

La mayoría de los sistemas tienen múltiples componentes. En una configuración tradicional, este suele ser un cliente que se distribuye a los usuarios, un servidor y una base de datos.

La base de datos suele ser una pieza de software altamente optimizada y de uso común, escrita por otra persona, mientras que los servidores son a menudo software personalizado que usted escribe específicamente para las necesidades de los clientes

En este ejemplo, el servidor se comunica con los clientes. Si la base de datos habla directamente con los clientes, generalmente hace que su sistema sea extremadamente inseguro porque el cliente (y por lo tanto sus usuarios) tiene acceso a todos sus datos.

El cliente envía una solicitud al servidor solicitando que verifique los detalles que se ingresaron con la base de datos. Una vez que se verifica al cliente, el servidor decide qué información puede ver, durante cuánto tiempo puede solicitarlos sin tener que volver a verificarlos, la cantidad de datos que se transmiten, etc.

Tomemos, por ejemplo, google. Cuando busca en Google su consulta de búsqueda, abre una página web (el cliente). El cliente habla con el servidor cuando está interactuando con Google, el servidor le envía sugerencias y finalmente le responde a su pregunta, pero usted, como cliente, no necesita acceder a toda la información en Google, solo los servidores de Google deberían tener acceda a toda esta información, y solo debería mostrarle lo que necesita saber.

Otra analogía: cuando estás en un restaurante, eres el cliente, tu camarero es el servidor, entiende lo que necesitas y le dice a la cocina (la base de datos) qué cocinar, y una vez que esté listo ' Te traeré el resultado. Eso es exactamente lo que hace un servidor.

No dude en hacer más preguntas :-)

    
respondido por el Pim de Witte 02.12.2014 - 03:03
fuente
2

ambos métodos en las preguntas tratan con ' con contraseñas de texto simple ', que es una idea muy mala . Sin embargo, para fines ilustrativos puede ayudar a aclarar las cosas.

Lógica de comparación en la aplicación:

$result = sql_query('SELECT users.password FROM users WHERE userId = %i', $userId);
if ($result['password'] == $userPassword) {
    print 'access granted';
} else {
    print 'wrong credentials';
}

Lógica de comparación en la base de datos:

$result = sql_query('SELECT (users.password = %s) AS passwordOk FROM users WHERE userId = %i', $userPassword, $userId);
if ($result['passwordOk'] == 1) {
    print 'access granted';
} else {
    print 'wrong credentials';
}

Hay varias razones por las que la segunda opción se considera menos segura. Un problema típico con el envío de una consulta sensible a la seguridad a un servidor de base de datos es que la consulta podría muy fácilmente terminan en un archivo de registro . Otros problemas provienen del hecho de que la mayoría de los servidores de bases de datos no implementan algoritmos de hashing de contraseñas seguras (como BCrypt) y en su lugar solo proporcionan algoritmos de hashing de propósito general.

Espero que esto ayude

    
respondido por el Monika 02.12.2014 - 13:51
fuente
1

Aplicación

La aplicación proporciona las credenciales a través del código lógico de la aplicación al servidor como una carga útil del flujo de datos de la aplicación.

Base de datos

La conexión se conecta directamente a la base de datos y emite comandos de la base de datos para confirmar las credenciales.

    
respondido por el schroeder 01.12.2014 - 21:26
fuente

Lea otras preguntas en las etiquetas