限制类型安全配置中的变量替换

Restrict variable substitution in typesafe config

使用类型安全配置,既可以执行变量替换,也可以完全覆盖键和值:

config {
 substitution.required = ${VAR}
 should.not.override = "should not be overridden"
}

java -jar executable.jar -Dconfig.should.not.override="This is a security risk"

变量替换的能力使我能够外部化应该外部化的配置,例如数据库 URL,这将根据部署环境(暂存、质量检查、生产)而有所不同。

但是,如果潜在的黑客使用恶意配置重新启动应用程序,那么完全覆盖任何内容的能力是一种安全风险。

是否可以允许变量替换但禁止完全覆盖???

您可以使用 ConfigFactory.defaultOverrides() 查看通过命令行提供的覆盖,并在调用 ConfigFactory.load().

之前检查它是否包含任何禁止内容

另一种选择是使用 ConfigFactory.load(String resourceBasename) 自己构建一个 Config 对象,而不是将命令行覆盖合并到其中。