4

Rails 中一个相当引人注目的安全漏洞最近揭示了在 Ruby 应用程序中解析用户提供的 YAML 的潜在危险。

快速的 Google 搜索显示Python 的 YAML 库包含一个safe_load方法,该方法只会反序列化“简单的 Python 对象,如整数或列表”,而不是任何任意类型的对象。

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

4

2 回答 2

6

按照Jim 的建议,我继续编写了safe_yaml,这是一个添加YAML.safe_load方法并在内部使用 Psych 来完成繁重工作的 gem。

于 2013-01-17T14:49:55.400 回答
4

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

可能还有其他选项可以在SyckPsych中使用,并且更直接,例如safe_load

于 2013-01-15T23:14:38.587 回答