Tabelle vs Booleans: quale delle due è più sicura per l'impostazione dei ruoli di amministrazione in un'app? [chiuso]

-2

Attualmente sto creando ruoli in cui ci sono utenti regolari, amministratori e super amministratori, ciascuno con autorizzazioni speciali. Ho rinviato a questo post su come farlo.

Fondamentalmente si tratta di impostare poche tabelle oltre alla tabella User : Roles (seconda tabella), UserRoles (tabella join) o creazione di attributi booleani per il modello User : admin e super_admin . Mentre sono in grado di fare entrambe le cose, cosa dovrei tenere a mente per mantenere la mia app sicura? Uno è migliore dell'altro? Spiegare.

Chiedo questo perché come la seconda risposta degli stati del post SO:

It really depends on what you wish to do with your admin role. The first option, I would say is a bit secure as the admin role is a unique model in itself.

The second option is straightforward and would help you get going with the least effort. However, if your users figure out the boolean variable and a way to set it, any user can become an admin and access areas you don't want them to.

Prima di arrivare a questa conclusione volevo ottenere un secondo parere in merito.

    
posta Carl Edwards 19.12.2015 - 00:56
fonte

2 risposte

2

Questa decisione non ha nulla a che fare con la sicurezza, ma la tua idea UserRoles è più estendibile mentre gli attributi booleani sono più semplici.

Come per quasi tutto (e sto diventando sempre più stanco di doverlo indicare), non c'è una regola generale che rende uno "migliore" rispetto all'altro in tutti i casi.

Scegline uno. Finché il codice che scrivi per interfacciarsi con il database è isolato, puoi facilmente modificarlo in futuro se trovi che è necessario.

Per ora, potresti prendere in considerazione una colonna level ENUM('normal', 'admin', 'superadmin') .

    
risposta data 19.12.2015 - 01:29
fonte
0

keeping my app secure?

Dipende in qualche modo dalla tua definizione di "sicuro". Comprende la possibilità di tornare indietro nel tempo e vedere chi ha avuto particolari permessi mesi fa? In tal caso, la tabella di join è l'ideale. Aggiungi i campi validForDateTime e validToDateTime e disponi di una cronologia di controllo completa.

Ma se hai solo bisogno di sapere chi ha il permesso adesso, la soluzione Enum suggerita da Lightness Races in Orbit sembra preferibile ai booleani (solo perché i booleani permettono a un utente di avere più ruoli contemporaneamente - una considerazione se questo era il forum di revisione del codice). Come giustamente affermato da altri, non vi è alcuna differenza di sicurezza intrinseca tra il metodo booleano e l'approccio alla tabella di join.

    
risposta data 19.12.2015 - 08:30
fonte

Leggi altre domande sui tag