在Ruby中是否有与yaml.safe_load相同的东西?

时间:2013-01-15 23:01:40

标签: python ruby security yaml

一个相当high-profile security vulnerability in Rails最近阐明了在Ruby应用程序中解析用户提供的YAML的潜在危险。

快速Google搜索显示Python's YAML library包含safe_load方法,该方法仅反序列化“整数或列表等简单Python对象”,而不是任意类型的对象。

Ruby有同等效力吗?有没有办法在Ruby应用程序中安全地接受YAML输入而无需手工编写自定义解析器?

2 个答案:

答案 0 :(得分:6)

关注Jim's advice我继续编写safe_yaml,这是一个添加YAML.safe_load方法的宝石,并在内部使用Psych进行繁重的工作。

答案 1 :(得分:4)

使用Psych(实际的解析器引擎)的低级接口,可以访问较低级别的结构,而无需将它们序列化回Ruby对象(请参阅http://rubydoc.info/stdlib/psych/Psych/Parser)。这并不像safe_load那么容易,但确实提供了一条路径。{1}}

可能还有其他选项适用于SyckPsych,而且更直接,例如safe_load