Diversi vantaggi per la sicurezza degli utenti MySQL

12

Chiunque abbia una cellula cerebrale sa che l'uso di un utente che non è root / dbo / etc aggiunge molto alla sicurezza e quanto può essere efficace l'attacco SQL injection. Mi chiedo se l'idea di fare un passo avanti sia una buona idea.

L'idea di base è semplice. Per le azioni di tipo guest (visualizzazione) utilizzare un utente 'guest' nel database che dispone solo delle autorizzazioni per select cose. Per le azioni di tipo utente (aggiunta / modifica), avere un utente 'utente', che ha solo le autorizzazioni per eseguire insert e update query. Inoltre, includi anche un terzo utente con azioni simili a "admin", per delete abilità.

NB: questo è stato semplificato per coprire solo le abilità CRUD di base

Pro:

  • Sicurezza aggiunta in teoria attraverso i limiti di autorizzazione.
  • Forza la sicurezza del CMS per prevenire attacchi di rappresentazione / riproduzione.

Contro:

  • Codice complicato all'interno di un CMS (che è ciò a cui sto pensando di utilizzare questa funzione in).
  • Forza la sicurezza del CMS (che non sarà sempre raggiungibile)

La mia domanda è questa:
C'è un vantaggio in termini di sicurezza nel separare ruoli e permessi in questo modo, e se è così, i vantaggi di fare questo giustificano un codice più complicato per forzare un utente a cambiare azione?

Per esempio, diciamo che il controllo per vedere se cambio utenti è solo un'istruzione if, e se tale affermazione fallisce, allora l'utente non è autorizzato a fare qualsiasi azione comunque, quindi l'opzione non lo fa t accadono in primo luogo.

    
posta Mike S 27.04.2011 - 20:50
fonte

3 risposte

6

In teoria questo tipo di cose dovrebbe sempre aiutare (principio del minimo privilegio) e non può davvero ferire, ma se in pratica si finisce con un livello intermedio CMS che mantiene comunque tutte le credenziali, allora non può essere di grande aiuto o affatto.

Un campanello d'allarme è che stai pensando solo in termini di iniezione SQL. Il principio del minimo privilegio è così fondamentale che dovrebbe comprare molta più protezione di quella, dovrebbe coprire tutte le vie di attacco e intere classi di vulnerabilità, non solo una.

Indipendentemente dal fatto che ci sia o meno un beneficio reale, penso che sia possibile (ad esempio) puntare su una macchina e dire "questa macchina ha sempre il privilegio di" ospite ", ecc. In altre parole, quando si guarda oltre il database, l'argomento del contributo di questo alla sicurezza del sistema intero è altrettanto semplice?

Se il risultato è solo una complessità aggiuntiva del CMS, potrebbe essere controproducente (ad esempio, l'introduzione della complessità tende a generare più bug, alcuni dei quali tenderanno a essere dei buchi di sicurezza, specialmente se il bug è in permessi di giocoleria). Quindi un altro campanello d'allarme è che tu sembri prevedere un groviglio di codice nel CMS. Questo può o non può essere necessario tuttavia - puoi farlo più semplicemente?

    
risposta data 27.04.2011 - 21:58
fonte
1

Rendere qualcosa di più complesso non fa mai bene alla sicurezza, ma d'altra parte dare a qualcuno più privilegi di cui ha bisogno può anche compromettere la sicurezza. Quindi è un equilibrio tra la complessità con funzioni di sicurezza aggiuntive o la semplicità di occultamento delle funzionalità aggiuntive. Quello che stai suggerendo sembra interessante. Tuttavia il mio suggerimento è di concentrare l'attenzione sulla creazione di un filtro per la sanitizzazione dei dati. Prevenire l'iniezione SQL per raggiungere anche il database.

    
risposta data 27.04.2011 - 21:21
fonte
0

Utilizza i certificati client SSL / TLS in un'istanza MySQL abilitata SSL / TLS per ogni app. Ci sono un milione di cose da fare con la sicurezza di MySQL e merita una serie separata di risposte.

Forse questa domanda è il posto giusto - Protezione avanzata dei server MySQL .

    
risposta data 28.04.2011 - 01:44
fonte

Leggi altre domande sui tag