Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数据库中存储JSON数据有多危险?_Javascript_Security_Json_Xss - Fatal编程技术网

Javascript 在数据库中存储JSON数据有多危险?

Javascript 在数据库中存储JSON数据有多危险?,javascript,security,json,xss,Javascript,Security,Json,Xss,我需要一种机制来存储在客户端javascript中创建的复杂数据结构。我一直在考虑使用该方法将javascript对象转换为字符串,将其存储在数据库中,然后将其拉出,并使用反向解析方法将javascript对象返回给我 这只是一个坏主意,还是可以安全地完成?如果可以,我应该避免哪些陷阱?还是我应该想出我自己的方法来实现这一点?这是可以做到的,我已经做到了。它和你的数据库一样安全 唯一的缺点是实际上不可能在查询中使用存储的数据。在这个过程中,您可能会希望将数据存储为表字段,以启用筛选和排序等功能

我需要一种机制来存储在客户端javascript中创建的复杂数据结构。我一直在考虑使用该方法将javascript对象转换为字符串,将其存储在数据库中,然后将其拉出,并使用反向解析方法将javascript对象返回给我


这只是一个坏主意,还是可以安全地完成?如果可以,我应该避免哪些陷阱?还是我应该想出我自己的方法来实现这一点?

这是可以做到的,我已经做到了。它和你的数据库一样安全

唯一的缺点是实际上不可能在查询中使用存储的数据。在这个过程中,您可能会希望将数据存储为表字段,以启用筛选和排序等功能


由于数据是用户创建的,请确保使用安全的方法插入数据,以保护自己免受注入攻击(不要盲目地将数据连接到查询字符串中).

只要您不使用
eval
反序列化就可以了,因为您使用的是数据库,这意味着您需要一种服务器端语言来与数据库通信。您拥有的任何数据都可以通过大多数服务器端语言轻松地从json转换为json

我无法想象一个合适的用例,除非你有一堆javascript,它需要非常高的性能,并且你已经用尽了所有其他的可能性,比如缓存、查询优化等等

这样做的另一个缺点是,您无法轻松查询数据库中的数据,当您想要完成任何类型的报告时,这总是很好的。 如果你的json结构改变了怎么办?你会更新数据库中的所有脚本吗?或者,您会强迫自己处理解析代码中的更改吗

结论


我认为这样做并不危险,但它为可管理性和未来的更新留下了很少的空间。

不确定您可以从javascript访问哪种形式的数据库。但是当一个web应用程序的javascript变得如此复杂以至于需要一个数据库时,我会有各种各样的“我对此有一种不好的感觉”…是的,我知道你的意思。不幸的是,我100%肯定我们不知道我们需要存储的所有数据片段,因此需要某种灵活的数据存储方法,排除严格的字段和表。我90%确信我永远不必去查询这些数据。+1因为我指出了对任何一种范式的可怕的、可怕的违反。。。但有时必须做的事情必须做:-/为什么会违反正常形式?如果您使用它来保存应用程序的状态,那么您实际上并没有使用它来存储数据,而是存储会话状态(如操作系统的hybernation/sleep),为什么会出错?我同意这可能有点像黑客,但没必要马上假设,是吗?。。虽然答案没有错,但用例是项目将持续要求每周至少四次添加具有广泛不同功能和数据块的新页面。从现在起到世界末日,我无法预测每周需要存储、重新编译和重新部署四次项目的所有数据,这听起来也不是一个好主意。通过将大部分功能代码放在客户端,这些页面可以“动态地”添加和更改。这是一个很好的观点,它会立即使我的所有参数无效。听起来像是一个激动人心的场景:-)谢谢。当我发布我之前的评论时,我正处于编码模式,现在看着它,我想我没有传达我想要的语气。如果是出于粗鲁,我会道歉。:)我感谢你的意见!没有必要道歉,伙计!这是完全公平的。之所以选择它作为答案,仅仅是因为它可能是需要记住的更重要的一点。