You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安全加载包含多个文档的YAML文件?

YAML多文档安全加载的那些事儿

处理YAML文件时,安全加载是不可忽视的要点。首先,单个YAML文档的标准安全加载方式是:

YAML.safe_load(content)

YAML本身支持在单个文件里包含多个文档,用---作为分隔符,比如这样的内容:

---
key: value
---
key: !ruby/struct
foo: bar

用safe_load加载多文档的局限

当你用YAML.safe_load(content)加载上面的多文档YAML时,只会返回第一个文档的内容:

{ 'key' => 'value' }

如果单独拆分出第二个文档再用safe_load加载,就会触发预期的安全异常——因为Struct不在默认的安全类白名单里:

Psych::DisallowedClass (Tried to load unspecified class: Struct)

加载多文档的常规方式

要一次性加载所有文档,你可以使用YAML.load_stream(content),它会返回一个包含所有文档内容的数组:

[ { 'key' => 'value' }, { 'key' => #<struct foo="bar"> } ]

现存的问题

可惜的是,目前Ruby的YAML库并没有提供YAML.safe_load_stream这样的方法,没办法在加载多文档时自动对非白名单的数据类型抛出安全异常,这在需要严格安全校验的场景下是个不小的缺憾。

内容的提问来源于stack exchange,提问作者Kimmo Lehto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:00:41