2009-08-18 3 views
7

Ho bisogno di generare UUID per archiviare infine in un database. Posso generare questi UUID da Javascript sul browser client (There are some examples here)?C'è qualche pericolo nella creazione di UUID in Javascript lato client?

C'è qualche rischio per la sicurezza di farlo in questo modo? Capisco che chiunque può modificare l'UUID prima che sia passato al server per la memorizzazione. Quindi dovrò controllare se sono davvero unici prima di memorizzarli nel database, ma a parte questo, ci sono altre cose da pagare?

(Ci scusiamo per il mio inglese, sentitevi liberi di correggere eventuali errori di grammatica)

edit: per rispondere alle domande sul perché vorrei fare questo, è perché posso creare un nuovo oggetto ed è identificatore Javascript e aggiungerlo alla mia vista e quindi effettuare una chiamata AJAX al server per aggiungerla al database. In questo modo, non ho bisogno di caricarlo dal database per sapere qual è il suo identificatore principale.

+0

Penso che potrebbe essere un problema di sicurezza che consente agli utenti di vedere il codice del generatore UUID. In teoria, potrebbe quindi essere possibile generare UUID esistenti per esempio id di sessione di altri utenti e simili. –

risposta

9

Non proprio. Finché si tratta di un semplice identificatore e nient'altro, e lo stai effettivamente verificando per validità e unicità, non è diverso dagli account utente che hanno un id nell'URL, per esempio.

Controlla la tua barra degli indirizzi. Scommetto che 1296234 è la chiave primaria di questa domanda, ma non posso davvero fare nulla con quella informazione. Lo stesso accordo con il tuo copione.

+0

Grazie. Non pensavo che potesse accadere qualcosa di sbagliato, ma volevo essere sicuro di non aver trascurato una specie di attacchi ben noti. –

3

Quali vantaggi vedi nel generare questi client-side? In tutta onestà, l'opzione migliore è generarla lato server, fuori dalla portata degli utenti. Potrebbe non essere in grado di salvarti da eventuali problemi di sicurezza gravi, ma ridurrà la convalida ridondante.

+0

So che questo thread è vecchio ma è necessario generare l'ID sul client se si utilizza completamente idempotent per creare chiamate REST. Un'altra alternativa sarebbe quella di interrogare il server per un nuovo ID e quindi utilizzare quell'ID nella chiamata REST di creazione. Ciò significa tuttavia due chiamate al server. – Alkaline

+1

@Sampson Non avrei mai pensato di dover generare un UUID sul lato client, ma ora sono interessato all'applicazione web offline e avere UUID generato sul lato client è perfetto per questo caso d'uso! – Maxime

+0

Se stai seguendo un CQS rigoroso e hai bisogno del codice ID (ad esempio per reindirizzare a una vista corretta), è un buon modo per farlo. – Shocked

3

C'è qualche ragione per cui il database non può generare (incrementare) un ID?

Se, come dici tu, dovrai verificare l'unicità del valore prima di inviarlo comunque, perché non avere solo la lingua di backend che stai utilizzando generandolo. Ciò renderebbe molto più opaco.

+2

Nota a margine qui per i futuri spettatori: smettere di fare affidamento sull'ID autogenerato. Scollegati dal database e usa gli UUID invece –

2

Sì. Il rischio non è specifico per l'UUID, qualsiasi ID generato sul lato client presenta alcuni rischi, a seconda di cosa si fa con l'ID. Il problema è che è molto difficile autenticare il Javascript. Se accetti l'ID generato dal cliente, accetti gli ID degli hacker.

I rischi possono includere,

  1. Session furto. Se si utilizza l'ID per identificare la sessione, qualcuno può utilizzare un ID esistente come ID generato e il server può considerarlo come una sessione esistente se non si presta la dovuta attenzione.

  2. Chiavi duplicate. True UUID è casuale ma qualcuno può generare chiavi duplicate che rovinano il tuo database.

Si potrebbe trovare il modo di difendersi da ciascuno di questi attacchi, ma questa è la protezione passiva. Potrebbe vanificare lo scopo originario di generare ID sul client, che è semplice.

+0

Se identifichi l'id di sessione, allora sei violato su qualsiasi sito Web. Il punto 1 non è un punto valido. –

Problemi correlati