#1645·pkl

为资源读取应用信任级别

作者: HT154创建于 2026年6月4日更新于 2026年7月31日

目前,Pkl 使用一种称为 信任级别 的机制来确定一个模块是否可以导入另一个模块。一个模块的信任级别是根据其 URI 确定的,一个模块不能导入信任级别更高的模块。这种机制的目的是防止"远程"模块导入"本地"模块。此机制不适用于资源读取(read()),这意味着来自任意 HTTP(s) 端点或包中的模块可以读取评估器已被允许访问的任意文件系统资源。在这里,将模块导入和资源读取处理相同是非常好的。此更改可能需要一个 SPICE。要实现这一点的主要障碍是“转换模块”模式,其中一个包中的模块可以被执行并参数化为要读取和用于代码生成的本地文件 URI(示例)。在这里强制执行信任级别将破坏这个特定用例。解决此问题的一种方法是通过 pkl run/pkl:Command,因为 CLI 框架已经适合这种用例。与普通的 Pkl 评估不同,CLI 命令可以在选项解析期间触发动态导入,这会导致信任级别的违反 _仅在选项解析期间》。在选项解析期间执行资源读取的类似机制也将被引入。目前通过 pkl eval 方法实现的转换工具,使用外部属性,将被迫迁移到 pkl run,并使用解析时读取。通过强制其他违反策略的读取通过此特定接口进行,我们可以消除恶意 Pkl 代码通过资源读取泄露敏感信息的许多可能途径。此更改是完全禁止 read() 操作中动态(非字符串字面量)URI 的一种替代方案,这将对语言的灵活性产生负面影响,特别是在自定义/外部资源读取方面。我们还可以考虑将信任级别作为高级评估器设置的方式。目前,信任级别只能在 Pkl 的 JVM API 中进行调整。