Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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.parse的Node.js实现_Javascript_Json_Node.js_Security_V8 - Fatal编程技术网

Javascript JSON.parse的Node.js实现

Javascript JSON.parse的Node.js实现,javascript,json,node.js,security,v8,Javascript,Json,Node.js,Security,V8,我需要从不受信任的json获取javascript对象 最初它以字符串的形式出现,有两种方式完成任务:eval()和JSON.parse() 在这里,我可以看到Node.js实现的JSON.parse,因为我担心它在后台使用eval,并且可能存在安全漏洞 我试图检查v8repo,甚至在Firefox中尝试Function.prototype.toSource(),但没有结果 有人能给我一些证据证明我不用担心使用它吗 不能将函数/类解析为JSON。如果有函数,它们将被表示为字符串。您可以检查,如果

我需要从不受信任的json获取javascript对象

最初它以字符串的形式出现,有两种方式完成任务:
eval()
JSON.parse()


在这里,我可以看到Node.js实现的
JSON.parse
,因为我担心它在后台使用eval,并且可能存在安全漏洞

我试图检查
v8
repo,甚至在Firefox中尝试
Function.prototype.toSource()
,但没有结果


有人能给我一些证据证明我不用担心使用它吗

不能将函数/类解析为JSON。如果有函数,它们将被表示为字符串。您可以检查,如果您尝试:

const obj={
a:()=>console.log(“测试”)
}
log(JSON.stringify(obj))

//在这里打印{}
v8developer
JSON.parse
不在引擎盖下使用
eval
——这正是使用
JSON.parse
的目的,也是强烈建议使用它(而不是
eval
)解析JSON数据的原因

正如feeela已经指出的,如果您想自己验证这一点,请查看源代码:

或者做一个实验:

var bad_json_data = 'console.log("executed!"); "{foo:1}"';
var o1 = eval(bad_json_data);  // Prints to console.
var o2 = JSON.parse(bad_json_data);  // SyntaxError!

也就是说,您必须始终小心不可信的输入。使用
JSON.parse
将JSON字符串转换为对象是安全的,但之后您仍然必须小心使用该对象的目的(作为一个随机示例,如果您尝试将其存储在数据库中,其属性值仍可能允许SQL注入攻击)

“因为我担心它在幕后使用eval,可能存在安全漏洞”-这似乎不是一个合理的担心。这是一个主要的软件项目,被大量的人使用,并且得到了大量的笔试。“在这里我可以看到JSON.parse的Node.js实现,“-它没有。它是从底层JS引擎(其中有多个引擎(包括V8和ChakraCore))获取的,您可以使用开源JSON库。“我试图检查V8 repo[…]“你也应该这么做。v8中JSON.parse实现的源代码如下:@AfferencicDeveloper-不。用C编写危险的代码非常容易。如果你想让自己放心,Google没有发布有安全缺陷的
JSON.parse
函数,那么你需要对C有足够的了解,以执行以下操作:我对他们的代码进行了安全审计。“你不能将函数/类解析为JSON”-这不是问题所在。亲爱的V8开发人员,请告诉我们JSON解析器是否使用正则表达式?它是否会受到重做攻击?不,JSON解析器不会在引擎盖下使用正则表达式。即使如此,我的理解是重做攻击通常需要攻击者提供恶意的regexp;因此任何内置的在任何环境中,只要内置regexp安全/性能良好,就可以在内部愉快地使用regexp,而不会受到此类攻击。