使用YAML.load解析json是否安全?

我使用的是ruby 2.1.0

我有一个json文件。 例如:test.json

{ "item":[ {"apple": 1}, {"banana": 2} ] } 

使用YAML.load加载此文件是否安全?

  YAML.load(File.read('test.json')) 

我正在尝试加载json或yaml格式的文件。

YAML可以加载JSON

 YAML.load('{"something": "test", "other": 4 }') => {"something"=>"test", "other"=>4} 

JSON将无法加载YAML。

 JSON.load("- something\n") JSON::ParserError: 795: unexpected token at '- something' 

会有一些模糊的案例起作用并产生不同的输出。

 YAML.load("") => false JSON.load("") => nil 

但通常YAML构造不符合JSON。

所以,首先尝试JSON.load因为它可能更适合于隐藏JSON的东西。
捕获JSON::ParserError错误并回YAML.load

在最近的工作中,我找到了Matt提到的那种角落案例。 例如

 puts JSON.load('{"x": "foo\/bar"}')['x'] 

成功印刷

 foo/bar 

尽管无偿的逃避¹而且

 puts YAML.load('{"x": "foo\/bar"}')['x'] 

失败:

 Psych::SyntaxError ((): found unknown escape character while parsing a quoted scalar at line 1 column 7) 

¹在本例中,按照net.sf.json.util.JSONUtils.quote的Java。 请注意,他们忘了在他们自己的Javadoc中做同样的引用,具有讽刺意味的是,所以你必须浏览源码才能理解!