Dove eseguire l'autorizzazione in un'app Web?

0

La maggior parte delle app web esegue controlli di autorizzazione a livello di controller. Questo è fondamentalmente ok, ma le app complessive tendono ad avere controlli ripetitivi. Ad esempio, potrebbero esserci una decina di azioni del controller che operano su un ordine e ogni azione deve verificare che l'utente corrente sia autorizzato ad accedere a tale ordine.

Alcune app si occupano di questo con le funzioni di supporto nell'ordine, ad es. Order.isUserAuthz () e questo riduce il numero di codice. Tuttavia, c'è ancora il rischio che un particolare metodo di controllo si dimentichi di chiamare quella funzione. Dalla mia esperienza con i test delle penne, questo è abbastanza comune nelle app complesse.

Invece, che ne dici se il livello del modello esegue il controllo dell'autorizzazione? Pertanto, quando carichi un ordine, verrà caricato solo se l'utente corrente è autorizzato. Poiché questo viene fatto dal livello del modello, non c'è il rischio che il livello del controller dimentichi di effettuare una chiamata. In definitiva, ciò che stai facendo è ridurre la quantità di codice critico per la sicurezza, che riduce il rischio di un errore di codifica che causa una vulnerabilità.

Questa mi sembra una buona idea, ma non è una pratica comune. Hai qualche idea sui rischi che potrebbe comportare o sulle difficoltà di implementazione?

    
posta paj28 21.10.2013 - 11:47
fonte

1 risposta

1

In base al modo in cui hai formulato la domanda che presumo tu intenda in un'app MVC.

Personalmente vedo MVC come un modello di presentazione. Tendo a che i miei modelli siano praticamente DTO. Il mio controller è responsabile solo del trasferimento dei dati dall'utente nel mio livello di servizio e della mappatura della risposta al DTO.

Il livello di servizio dovrebbe contenere tutta la logica di autenticazione, e quindi sarebbe condiviso tra molti diversi controller

I miei controllori sono anche responsabili della traduzione delle eccezioni di sicurezza interne ai codici di stato http appropriati.

In realtà i controller dovrebbero essere abbastanza privi di logica esattamente per la ragione che descrivi.

    
risposta data 21.10.2013 - 12:17
fonte

Leggi altre domande sui tag