Domanda

Sto discutendo con uno sviluppatore di una situazione in cui gli utenti eseguono il login e l'accesso ai documenti in un'applicazione Web. Quando cariciamo il documento affinché l'utente possa visualizzarlo, abbiamo l'ID utente in sessione e l'ID documento che può essere passato tramite QueryString.

Per impedire all'utente di modificare il documentID su QueryString, propongo che la procedura memorizzata che carica il documento prenda UserId come parametro per convalidare i diritti sul documento.

Il mio amico sviluppatore suggerisce di eseguire una procedura separata per determinare i diritti di accesso al documento all'inizio della pagina e di eseguire una procedura per afferrare il documento quando il documento dovrebbe essere mostrato.

Ci manca qualcosa? Qual è il più efficiente e sicuro? Ho pensato di trasferire UserId con DocID in una chiamata di procedura per verificare i diritti e estrarre il documento era una soluzione più efficiente.

È stato utile?

Soluzione

Dal punto di vista delle prestazioni, è meglio passare UserID insieme a DocumentID in una procedura memorizzata. Hai solo un viaggio di andata e ritorno al server di database. Inoltre, come altri hanno sottolineato, se si recupererà questo documento da altre pagine o applicazioni, se si utilizza la stessa procedura memorizzata, si assicura che non si ignora la sicurezza per farlo.

Tuttavia, ci sono scenari in cui è logico disporre di stored procedure di verifica della sicurezza dedicate. Se hai altre risorse che desideri proteggere oltre ai documenti e il tuo codice di verifica non è banale, potresti non voler duplicare il codice di verifica in ogni procedura memorizzata nel tuo database. In tal caso potrebbe essere sensato spostare l'infrastruttura di sicurezza al livello di accesso ai dati e fare in modo che il livello di accesso ai dati effettui la chiamata db per autorizzare l'accesso prima di recuperare la risorsa richiesta. Se segui questa strada, non vuoi fare affidamento sullo sviluppatore che deve sempre ricordare di effettuare una chiamata db di autorizzazione prima di richiedere una risorsa.

Altri suggerimenti

  

Propongo che la stored procedure   che carica il documento prende il   UserId come parametro da convalidare   diritti sul documento.

Penso che questa sia la strada da percorrere. Se per nessun altro motivo è più sicuro. Se riutilizzi questo proc e poi dimentichi di controllare l'accesso, hai aperto un grande buco. In questo modo è evidente e evidente che non è possibile accedere al documento se non si ha accesso.

L'ID utente deve essere una variabile di sessione. Destra. Passa il documentID nella stringa di query. Yup.

Supponendo che i documenti siano archiviati nel database, avrei una tabella per le autorizzazioni: un ID record un ID utente e un ID documento. Partecipa a questa tabella quando si richiama il documento. Se non si ottiene un risultato, non si ottiene il documento. Indicizzalo tutto bene e sarà veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top