JSON数据 - 分析或“Eval'ed(JSON Data - Parsed Or 

2019-06-26 05:37发布

从安全角度来看,我可以看到简单地做对传入的JSON数据的“EVAL”作为一个严重的错误。 如果你有数据,如下面你就会有一些问题。

{ someData:((function() { 
    alert("i'm in ur code hackin' ur page"); 
})()) }

我不知道什么最流行的JavaScript库吗? 它是一个人工解析或者只是一个eval?

[编辑]

我没有问是否应该EVAL /解析-我是问什么方法所使用的一些流行的JavaScript库(jQuery的,原型,等...)

Answer 1:

下面是什么官JavaScript分析器的作用:

// In the second stage, we run the text against regular expressions that look
// for non-JSON patterns. We are especially concerned with '()' and 'new'
// because they can cause invocation, and '=' because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.

// We split the second stage into 4 regexp operations in order to work around
// crippling inefficiencies in IE's and Safari's regexp engines. First we
// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// replace all simple value tokens with ']' characters. Third, we delete all
// open brackets that follow a colon or comma or that begin the text. Finally,
// we look to see that the remaining characters are only whitespace or ']' or
// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.

if (/^[\],:{}\s]*$/.
    test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
    replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
    replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.

    j = eval('(' + text + ')');

    ...

有了内置的例外JSON解析的支持是在现代浏览器,这是所有(基于库的)安全JSON解析器做(即正则表达式测试之前eval )。

安全库 (除了官方json2实现)

Prototype的isJSON功能。

Mootools的JSON.decode函数(同样,通过之前的正则表达式测试eval )。

不安全库

道场的fromJson 提供安全eval ING。 这里是他们的整个实施(减去评论) :

dojo.fromJson = function(json) {
    return eval("(" + json + ")");
}

jQuery的不提供安全的JSON eval “荷兰国际集团,但看到官方插件的secureEvalJSON功能(线143)。



Answer 2:

你绝对应该分析它! JSON只是JavaScript的一个子集。 但是, eval将评估任何JavaScript代码,而不是像一个JSON解析器,特定子集会。



Answer 3:

使用evalJSON()呢?
据我所知,这主要调用eval()函数的一些卫生检查后。



Answer 4:

从http://code.google.com/p/json-sans-eval/ :

在JavaScript中快速和安全的JSON解析器?

这JSON解析器不尝试验证JSON,所以可能会返回一个结果给定一个语法上是无效的输入,但不使用eval所以是确定的,保证不会修改低于其返回值以外的任何物体。

有一些在JavaScript JSON解析器的? 在json.org。 这种实现方式应该何时使用,安全性是一个问题(当JSON可能来自不受信任的来源),速度是一个问题,并示数上畸形的JSON是不是一个问题。

此实现

  • 优点快速,安全
  • 缺点没有验证

json_parse.js

  • 优点验证,安全
  • 缺点慢

json2.js

  • 优点快速,一些验证
  • 缺点可能不安全

json2.js是非常快的,但存在安全隐患的,因为它调用的eval解析JSON数据,所以攻击者可能能够提供奇怪的JS,看起来像JSON,但执行任意JavaScript。

如果你必须使用json2.js与不受信任的数据,一定要保持你的json2.js的版本是最新的,让你得到补丁他们释放。



文章来源: JSON Data - Parsed Or 'Eval'ed