2013-01-15 92 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

不錯,我會檢查出來 –

相關問題