2009-08-18 5 views
7

Necesito generar UUID para eventualmente almacenar en una base de datos. ¿Puedo generar estos UUID desde Javascript en el navegador del cliente (There are some examples here)?¿Hay algún peligro para crear UUID en JavaScript del lado del cliente?

¿Hay algún riesgo de seguridad de hacerlo de esta manera? Entiendo que cualquiera puede modificar el UUID antes de pasarlo al servidor para su almacenamiento. Así que tendré que comprobar si son realmente únicos antes de almacenarlos en la base de datos, pero aparte de eso, ¿hay alguna otra cosa para finalizar?

(Lo siento por mi Inglés, no dude en corregir los errores gramaticales)

edición: para responder a preguntas acerca de por qué me gustaría hacer esto, es porque puedo crear un nuevo objeto y es identificador en Javascript y agrégalo a mi vista y luego realiza una llamada AJAX al servidor para agregarlo a la base de datos. De esta forma, no necesito cargarlo de nuevo desde la base de datos para saber cuál es su identificador primario.

+0

Creo que podría ser un problema de seguridad que los usuarios vean el código del generador de UUID. En teoría, podría ser posible generar UUID existentes de, por ejemplo, identificadores de sesión de otros usuarios y demás. –

Respuesta

9

No realmente. Siempre que sea un identificador simple y nada más, y de hecho lo está comprobando para verificar su validez y unicidad, no es diferente de las cuentas de usuario que tienen una identificación en la url, por ejemplo.

Mire la barra de su URL. Apuesto a que 1296234 es la clave principal de esta pregunta, pero realmente no puedo hacer nada con esa información. Mismo trato con su script

+0

Gracias. No pensé que pudiera pasar nada malo, pero quería estar seguro de no pasar por alto algunos tipos de ataques bien conocidos. –

3

¿Qué beneficio ves al generar estos clientes? Honestamente, la mejor opción es generarlo desde el lado del servidor, fuera del alcance de los usuarios. Puede que no lo salve de problemas serios de seguridad, pero reducirá la validación redundante.

+0

Sé que este hilo es antiguo, pero es necesario generar el ID en el cliente si está utilizando las llamadas REST completamente idempotentes. Otra alternativa sería consultar al servidor por una nueva ID y luego usar esa ID en la llamada CREAR REST. Sin embargo, eso significa dos llamadas al servidor. – Alkaline

+1

@Sampson Nunca pensé que tendría que generar un UUID en el lado del cliente, pero ahora, estoy interesado en la aplicación web sin conexión y tener UUID generado en el lado del cliente es perfecto para este caso de uso. – Maxime

+0

Si sigue un CQS estricto y necesita la identificación de regreso (por ejemplo, para redirigir a una vista adecuada), es una buena forma de hacerlo. – Shocked

3

¿Hay algún motivo por el que no pueda hacer que la base de datos genere (incremente) una ID?

Si, como dices, deberás verificar la exclusividad del valor antes de enviarlo de todos modos, ¿por qué no tener el lenguaje de fondo que estás utilizando? Generarlo. Eso lo haría mucho más opaco.

+2

Nota al margen aquí para futuros espectadores: deje de confiar en la identificación autogenerada. Desacoplarse de la base de datos y usar UUIDs en su lugar –

2

Sí. El riesgo no es específico de UUID, cualquier ID generada por el cliente tiene algunos riesgos, dependiendo de lo que haga con la ID. El problema es que es muy difícil autenticar el Javascript. Si acepta la ID generada por el cliente, acepta cualquier ID de los piratas informáticos.

Los riesgos pueden incluir,

  1. robo de sesión. Si usa la identificación para identificar la sesión, alguien puede usar una ID existente como ID generada y el servidor puede tratarla como una sesión existente si no se está tomando la precaución adecuada.

  2. Llaves duplicadas. El verdadero UUID es aleatorio, pero alguien puede generar claves duplicadas que arruinarán su base de datos.

Puede encontrar formas de defenderse de cada uno de estos ataques, pero esa es la protección pasiva. Podría frustrar el propósito original de generar ID en el cliente, lo cual es simple.

+0

Si identifica la identificación de la sesión, entonces es pirateado en cualquier sitio web ... el punto 1 no es un punto válido. –

Cuestiones relacionadas