为什么不用eval()JSON?

时间:2010-11-24 19:13:15

标签: javascript json eval

据我所知,由于安全性,JavaScript中的eval() JSON对象被认为是不好的做法。如果JSON来自另一台服务器,我可以理解这种担忧。

但是如果JSON是由我自己的服务器提供的并且是使用PHP的json_encode创建的(让我们假设它没有错误),那么简单地使用eval()来读取JS中的JSON是否合法或者我目前无法想到任何安全问题?

我真的不想处理动态加载JSON解析器,并且很乐意只使用eval()

PS:我显然会使用原生的JSON对象(如果可用),但想要回归到eval()的IE / Opera。

6 个答案:

答案 0 :(得分:9)

在你的场景中,问题变成了,PHP从哪里获取javascript来执行?这个频道是否安全,并且没有潜在的用户操纵?如果您不直接控制该频道怎么办?

答案 1 :(得分:7)

有许多方法可能会危及您的安全性。

  • 中间人攻击理论上可以改变传递给客户端的数据内容。
  • 您的服务器流量可能会在其他地方截获,并且可能会提供不同的内容(与MIM攻击不同)
  • 您的服务器可能已被盗用,数据源可能会被篡改。

这些只是简单的例子。 XSS很讨厌。

“一盎司的预防值得一磅治疗”

答案 2 :(得分:3)

除了明显的安全问题:

  1. 原生JSON 更快
  2. 您不需要“加载”JSON解析器,它只是对JavaScript引擎的另一个函数调用

答案 3 :(得分:0)

提示: 在asp.net中使用JSON被认为是糟糕的,因为DateTime在服务器和客户端之间的解析不同,所以我们使用特殊的函数来反序列化javascript中的日期。我不确定PHP是否有同样的问题,但值得一提。

答案 4 :(得分:0)

看看这个:http://blog.mozilla.com/webdev/2009/02/12/native-json-in-firefox-31/

所以至少对于firefox你可以使用内置的json解析器

答案 5 :(得分:-2)

真的?这里的一些人是偏执狂。如果您正在提供JSON并且您知道它是安全,则可以回退(*)eval();而不是IE的js lib。毕竟,IE用户还有更多需要担心的问题。

中间人的争论是bull *。

(*)单词后备安全以粗体显示,因为此处有些人没有看到它们。