一个相当high-profile security vulnerability in Rails最近阐明了在Ruby应用程序中解析用户提供的YAML的潜在危险。
快速Google搜索显示Python's YAML library包含safe_load
方法,该方法仅反序列化“整数或列表等简单Python对象”,而不是任意类型的对象。
Ruby有同等效力吗?有没有办法在Ruby应用程序中安全地接受YAML输入而无需手工编写自定义解析器?
答案 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}}
可能还有其他选项适用于Syck
和Psych
,而且更直接,例如safe_load
。