2011-03-15 19 views
9

Necesito un mecanismo para almacenar estructuras de datos complejas creadas en javascript del lado del cliente. He estado considerando utilizar el método stringify para convertir el objeto javascript en una cadena, almacenarlo en la base de datos y luego retirarlo y usar el método de análisis inverso para devolver el objeto javascript.¿Qué tan peligroso es almacenar datos JSON en una base de datos?

¿Es solo una mala idea o puede hacerse de manera segura? Si puede, ¿cuáles son algunos escollos que debería evitar? ¿O debería proponer mi propio método para lograr esto?

+1

No sé a qué tipo de base de datos tiene acceso desde javascript. Pero recibo todo tipo de "Tengo un mal presentimiento sobre esto" cuando el javascript de una aplicación web se vuelve tan complejo que necesita una base de datos ... –

+0

Sí, sé lo que quieres decir. Lamentablemente, estoy 100% seguro de que no conocemos todas las piezas de datos que necesitaremos almacenar, lo que requiere algún tipo de método flexible de almacenamiento de datos que excluya campos y tablas estrictos. Y estoy 90% seguro de que nunca tendré que consultar estos datos. –

Respuesta

7

Está bien siempre que no se deserialice con eval.

+0

Elegido como respuesta simplemente porque probablemente sea uno de los puntos más importantes para recuerda. –

9

Se puede hacer y lo he hecho. Es tan seguro como tu base de datos.

El único inconveniente es que es prácticamente imposible utilizar los datos almacenados en las consultas. A lo largo de la pista, puede desear haber almacenado los datos como campos de tabla para habilitar el filtrado y la ordenación, etc.

Dado que los datos son creados por el usuario, asegúrese de estar utilizando un método seguro para insertar los datos para protegerse de los ataques de inyección (no solo concatena ciegamente los datos en una cadena de consulta).

+0

+1 por señalar la horrible y horrible violación de casi cualquier tipo de forma normal ... pero a veces lo que debe hacerse debe hacerse: -/ – sleske

+2

¿Por qué sería una violación de la forma normal? Si lo está usando para guardar un estado de una aplicación, entonces no lo está usando para almacenar datos, pero para almacenar un estado de sesión (como un hibernación/suspensión para un sistema operativo), ¿por qué sería incorrecto? ? Estoy de acuerdo en que PUEDE ser un truco, pero no es necesario suponerlo de inmediato, ¿no? ... Sin embargo, nada de malo en la respuesta ... – Nanne

1

Como está utilizando una base de datos, significa que necesita un idioma en el servidor para comunicarse con la base de datos. Cualquier información que tenga se convertirá fácilmente desde y hacia json con la mayoría de los idiomas del lado del servidor.

No puedo imaginar un caso de uso adecuado a menos que tenga un tload sh * de Javascript, que tiene que ser de buen calidad, y que se han agotado todas las otras posibilidades, como el almacenamiento en caché, la optimización de consultas, etc ...

Otro inconveniente de hacer esto es que no puede consultar fácilmente los datos en su base de datos, lo que siempre es bueno cuando quiere que se realice cualquier tipo de informe. ¿Y qué pasa si su estructura json cambia? ¿Va a actualizar todos los scripts en su base de datos? ¿O te obligarás a hacer frente a los cambios en el código de análisis?

Conclusión

En mi humilde opinión, no es peligroso hacerlo pero deja poco espacio para la gestión y actualizaciones futuras.

+0

El caso de uso es que el proyecto requerirá continuamente que se agreguen nuevas páginas con funcionalidades y datos ampliamente diferentes al menos cuatro veces por semana. No puedo predecir todos los datos que deben almacenarse y recompilar y volver a implementar el proyecto cuatro veces por semana desde ahora hasta el día del juicio final tampoco parece ser una buena idea.Al colocar la mayor parte del código de funcionalidad en el lado del cliente, estas páginas se pueden agregar y modificar "sobre la marcha". –

+0

Tiene un buen punto e invalida inmediatamente todos mis argumentos. Suena como un escenario emocionante :-) – Peter

+0

Gracias. Estaba en el modo de codificación cuando publiqué mi comentario anterior y lo miro ahora. No creo haber transmitido el tono que pretendía. Disculpas si fue grosero de alguna manera. :) ¡Aprecio tu aporte! –

Cuestiones relacionadas