Dovrei pensare alla sicurezza a livello di riga / documento del database?

2

Supponiamo di avere un'applicazione web che è un social network. Per consentire a due persone di accedere ai contenuti di ognuno, devono diventare amici.

C'è una logica nell'applicazione per garantire che entrambi siano migliorati a vicenda e una volta che ciò accade, viene effettuato un aggiornamento nell'array "amici" di ciascun utente.

Mi chiedo però; Supponiamo che qualche hacker abbia trovato un modo per aggiungere il proprio user_id alla matrice friends di un altro utente. Ora può visualizzare i contenuti dell'altro utente non autorizzati. Per semplicità, supponiamo che questo sia l'unico difetto di sicurezza nel sistema.

Come si protegge da questo tipo di possibilità? Ci sono funzionalità nei database che gestiscono questo?

P.S. Il database che sto usando è MongoDB, ma è anche curioso di sapere degli altri

    
posta CodyBugstein 14.02.2018 - 17:30
fonte

2 risposte

2

Generalmente, ciò che stai descrivendo è responsabilità del livello dell'applicazione e non del livello del database. L'applicazione deve assicurarsi che solo gli amici accettati reciprocamente vengano aggiunti all'elenco e che sia richiesta un'autorizzazione appropriata per accedere ai dati.

Questa responsabilità non può essere spostata sul database in alcun modo semplice, come spiegato da Pascal . Alla fine, avrai sempre bisogno di un meccanismo attraverso il quale l'app dice al database che due persone sono amici. Se l'app può essere ingannato per "mentire" sul database, hai problemi, non importa cosa.

Quello che potresti fare è bloccare l'applicazione dall'aggiornamento delle tabelle e affidarti invece a procedure che rafforzano i tuoi limiti di sicurezza. Ma ora hai appena spostato il problema in un nuovo posto. E probabilmente in un linguaggio di programmazione e in un ambiente di sviluppo in cui è peggio lavorare. Cercare di inserire la logica dell'applicazione nel database non è un successo.

Quindi il livello dell'applicazione è quello pertinente qui. Focalizza la tua energia per assicurarti che.

    
risposta data 16.02.2018 - 11:08
fonte
1

Are there features in databases that handle this?

Diamo un'occhiata a MySQL:

Il database viene eseguito come processo proprio (proprio come MongoDB). Ci si connette al processo di database con credenziali utente specifiche. L'autorizzazione viene determinata in base a quale utente è connesso.

In un'app web, l'applicazione web di solito ha le proprie credenziali utente per connettersi al db, ma l'intera webapp utilizza la stessa connessione db e pertanto è vincolata dagli stessi diritti di accesso.

Quindi non è possibile risolvere il problema limitando i diritti di accesso ad alcune righe o colonne db o anche tabelle. Gli utenti nella tua app non corrispondono agli utenti del database, quindi devi implementare l'autorizzazione per gli utenti dell'app nell'app. Non puoi rimandarlo al database.

    
risposta data 15.02.2018 - 21:48
fonte

Leggi altre domande sui tag