使用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中做同样的引用,具有讽刺意味的是,所以你必须浏览源码才能理解!