Yaml.load()
警告:使用从不受信任的来源收到的任何数据进行调用是不安全的!
是安全问题吗?恶意 YAML 文件能做什么?
我也想知道这一点,并在文档中找到了以下内容:
请注意,如果要将对象限制为 List 或 Long 等标准 Java 对象,则需要使用 SafeConstructor。
Yaml yaml = new Yaml(new SafeConstructor());
上面引用的链接指向一个测试用例,其中 YAML 文档包含对 Java 对象的引用。如果没有SafeConstructor
,yaml.load
将调用对象的无参数构造函数,这对于类路径中的某些类可能是一件坏事。使用SafeConstructor
,只会调用SafeConstructor
嵌套类(Java 代码)。
SnakeYAML 允许使用任何类加载器。创建类的实例时,它会调用构造函数。它将在那里运行任何代码。如果您自己加载课程 - 不用担心。