2013-01-15 71 views
4

最近,high-profile security vulnerability in Rails解释了在Ruby应用程序中解析用户提供的YAML的潜在危险。在Ruby中是否有与yaml.safe_load相当的功能?

快速谷歌搜索显示Python's YAML library包括一个safe_load方法,它将只反序列化“简单的Python对象,如整数或列表”,而不是任何任意类型的对象。

Ruby是否有等价物?有没有什么方法可以安全地接受Ruby应用程序中的YAML输入,而无需手动编写自定义分析器?

回答

4

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

可能有其他的选项可以在SyckPsych中使用,而且更直接,比如safe_load

+2

感谢您的建议!你可以看到我按照你的建议做了,[把它放在GitHub上](https://github.com/dtao/safe_yaml)。 –

6

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

+0

不错,我会检查出来 –

相关问题