Convalida delle credenziali - Logica in Application vs Database

2

Sto studiando

Sicurezza delle applicazioni Web, Guida per principianti in brossura - 3 novembre 2011 di Bryan Sullivan (Autore), Vincent Liu (Autore)

Nella pagina 69, "Convalida delle credenziali", si dice che è possibile convalidare le credenziali in base a

  1. Logica di confronto nell'applicazione con password in chiaro
  2. Logica di confronto nel database con password in chiaro ....

Non riesco a capire la differenza tra la logica in applicazione vs database.

Il testo di "La logica di confronto nell'applicazione ..." dice:

The application sends a request (for example, SQL query or LDAP query) to the back-end database to retrieve the record associated with the username...

Il testo di "Logica di confronto nel database ..." dice:

This technique involves crafting a SQL query or LDAP request to the back-end system with a conditional statement that asks the back end to return any records with matching fields that correspond to the supplied username and the supplied password

Non riesco a cogliere la differenza tra i due. Penso che l'applicazione crei anche una query SQL o una richiesta LDAP al sistema di back-end con un'istruzione condizionale.

Come visualizzo questo? Grazie!

    
posta Glowie 01.12.2014 - 20:35
fonte

3 risposte

2

Pensaci in questo modo:

La maggior parte dei sistemi ha più componenti. In una configurazione tradizionale di solito si tratta di un client che viene distribuito agli utenti, a un server e a un database.

Il database è solitamente un software di uso comune, altamente ottimizzato, scritto da qualcun altro, mentre i server sono molto spesso software personalizzati che vengono scritti specificamente per le esigenze dei clienti

In questo esempio, il server parla con i client. Se il database parla direttamente con i client, generalmente rende il sistema estremamente insicuro perché il client (e quindi i tuoi utenti) ha accesso a tutti i tuoi dati.

Il client invia una richiesta al server chiedendo di verificare i dettagli che sono stati inseriti con il database. Una volta verificato il client, il server decide quali informazioni può vedere il cliente, per quanto tempo il client può richiedere tali dati senza dover essere riconvalidato, la quantità di dati trasmessi, ecc.

Prendi ad esempio google. Quando esegui la query di ricerca su google, apri una pagina Web (il client). Il cliente parla al server mentre interagisci con google, il server ti rimanda i suggerimenti e alla fine ti dà la risposta alla tua domanda, ma tu come cliente non hai bisogno di accedere a tutte le informazioni in google, solo i server di google dovrebbero avere accesso a tutte queste informazioni e dovrebbe solo mostrarti ciò che devi sapere.

Un'altra analogia, quando sei in un ristorante, sei il cliente, il cameriere è il server, capisce di cosa hai bisogno e dice alla cucina (il database) cosa cucinare e una volta che è pronto è " Ti porterò il risultato. Questo è esattamente ciò che fa un server.

Sentiti libero di fare ulteriori domande :-)

    
risposta data 02.12.2014 - 03:03
fonte
2

entrambi i metodi nelle domande trattano " con password in chiaro ", che è una idea molto cattiva . Tuttavia, a scopo illustrativo è possibile aiutare a chiarire le cose.

Logica di confronto nell'applicazione:

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

Logica di confronto nel database:

$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';
}

Ci sono diversi motivi per cui la seconda opzione è ritenuta meno sicura. Un tipico problema con l'invio di una query sensibile alla sicurezza a un server di database è che la query potrebbe molto facilmente finire in un file di registro . Altri problemi derivano dal fatto che la maggior parte dei server di database non implementano algoritmi di hash di password complessi (come BCrypt) e forniscono solo algoritmi di hashing generici.

Spero che questo aiuti

    
risposta data 02.12.2014 - 13:51
fonte
1

Applicazioni

L'applicazione fornisce le credenziali tramite la logica del codice dell'applicazione al server come payload del flusso di dati dell'applicazione.

database

La connessione si collega direttamente al database e invia comandi del database per confermare le credenziali.

    
risposta data 01.12.2014 - 21:26
fonte

Leggi altre domande sui tag