Sto cercando di implementare un controllo di proprietà sugli oggetti JSON e voglio evitare di tornare al database per assicurare la proprietà di detto oggetto / record (cioè, per impedire a un utente di aggiornare un oggetto / record che non possiedono - per lo più operazioni CRUD). Ciò si verifica nel contesto di un'API di servizio / applicazione Web.
Il mio pensiero è di avere un UUID di proprietà "proprietario" assegnato a un sistema lato server associato a ogni record utente, in modo che quando si passa un oggetto JSON di proprietà dell'utente alla vista, il sistema crittografa l'UUID di "proprietà" privato del proprietario usando bcrypt con un salt casuale e lo assegna all'oggetto / record (dove potrebbe essere persistente insieme al record per scopi di caching in modo che non debba essere nuovamente crittografato). Inoltre, dovrei notare che è possibile che gli oggetti di proprietà possano essere crittografati separatamente ognuno con il proprio sale generato a caso, anche se sono di fatto lo stesso UUID di proprietà dell'utente (questo è necessario per impedire il rilevamento della proprietà dell'oggetto dell'utente in alcune applicazioni casi).
Successivamente, se un utente tenta di aggiornare detto oggetto, il server dovrà convalidare il proprio UUID privato con l'hash di bcrypt per assicurarsi che disponga dei diritti di proprietà per aggiornare il record.
Si presume che criptassi utilizzando un numero appropriato di round per la crittografia. Un'altra ipotesi che sto facendo è che la crittografia e il tempo di controllo superino i tempi di controllo del database. L'ultima ipotesi da sottolineare è questa rigorosamente una verifica della sicurezza delle app e non farebbe nulla se qualcuno avesse effettivamente preso possesso del database.
La mia attuale opinione è che con l'UUID che è casuale e che le dimensioni della stringa siano grandi (insieme ad un numero appropriato di round) renderebbe pubblicamente esposti questi hash di bcrypt non essere un problema. O questo approccio è solo troppo rischioso / controllato?