Rails 中一个相当引人注目的安全漏洞最近揭示了在 Ruby 应用程序中解析用户提供的 YAML 的潜在危险。
快速的 Google 搜索显示Python 的 YAML 库包含一个safe_load
方法,该方法只会反序列化“简单的 Python 对象,如整数或列表”,而不是任何任意类型的对象。
Ruby 有等价物吗?有没有办法在 Ruby 应用程序中安全地接受 YAML 输入,而无需手动编写自定义解析器?
使用到Psych
(实际的解析器引擎)的较低级别的接口,可以访问较低级别的结构,而无需将它们序列化回 Ruby 对象(请参阅http://rubydoc.info/stdlib/psych/Psych/Parser)。这并不像 那么容易safe_load
,但它确实提供了实现它的途径。
可能还有其他选项可以在Syck
和Psych
中使用,并且更直接,例如safe_load
。