使用 SnakeYAML 从不受信任的来源加载 YAML 文件时会发生啥?

Posted

技术标签:

【中文标题】使用 SnakeYAML 从不受信任的来源加载 YAML 文件时会发生啥?【英文标题】:What can happen when loading a YAML file from an untrusted source with SnakeYAML?使用 SnakeYAML 从不受信任的来源加载 YAML 文件时会发生什么? 【发布时间】:2013-09-13 06:15:31 【问题描述】:

SnakeYAML 文档says:

警告:使用从不受信任的来源收到的任何数据调用 Yaml.load() 是不安全的!

是安全问题吗?恶意 YAML 文件能做什么?

【问题讨论】:

它可以运行恶意代码。 @Brian 所以 YAML 文件可以包含 Java 代码,会在解析时执行? 【参考方案1】:

我也想知道这一点,并在文档中找到以下内容:

注意是否要将对象限制为标准 Java 对象,例如 List 或者你需要to use SafeConstructor。

Yaml yaml = new Yaml(new SafeConstructor());

上面引用的链接指向一个测试用例,其中 YAML 文档包含对 Java 对象的引用。如果没有SafeConstructoryaml.load 将调用对象的无参数构造函数,这对于类路径中的某些类可能是一件坏事。使用SafeConstructor,只会调用SafeConstructor nested classes (Java code)。

【讨论】:

【参考方案2】:

SnakeYAML 允许使用任何类加载器。创建类的实例时,它会调用构造函数。它将在那里运行任何代码。如果您自己加载课程 - 不用担心。

【讨论】:

“自己加载类”是什么意思?

以上是关于使用 SnakeYAML 从不受信任的来源加载 YAML 文件时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

Youtube IFrame API 不受信任的来源

访问从不同来源加载的 iframe 的内容

java 查找是否从受信任的来源安装了该应用

CWE-501: Trust Boundary Violation违反信任边界的代码漏洞缺陷

查看此处解析的 XML 是不是来自受信任的来源,否则将 settings.DtdProcessing 设置为 System.Xml.DtdProcessing.Prohibit 或 .Ignore

Google 将删除 PayPal 受信任的 URL