如何使用包含/排除模式?

哈难Kemelman
2022-12-25火灾

主题:

如何使用包含/排除模式?

作品简介:

Artifactory可以通过使用排除/包含模式限制工件的解析或部署。这是一个有用的功能,可以帮助避免可能的安全风险。

什么是包含/排除模式?

顾名思义,包含/排除模式是一组类似蚂蚁的模式,其形式为x / y / * * / z /这是可以的在存储库级别上配置限制工件的部署、解析和搜索。

包括模式是处理工件请求时要包括的模式列表。只有匹配已配置的“包含模式”之一的工件才会被服务。(默认包含所有“**/*”)

排除模式是在根据配置的“排除模式”评估工件请求时要排除的模式列表。(默认不排除)

如何使用排除模式避免安全风险?

当使用聚合本地和远程存储库的虚拟存储库时,所部署的任何私有构件都存储在本地存储库中,并且仅供授权的内部使用。

但是,考虑一下如果通过虚拟存储库请求内部工件,并且该请求无意中指向组织之外,会发生什么情况。(通过虚拟聚合的配置远程存储库进行搜索)

出现这种情况有几个原因。例如:

  • 在请求的工件名称中有一个简单的拼写错误

  • 开发人员请求具有本地存储库中不存在的版本号的快照。

  • 开发人员请求一个内部包,但没有指定版本

在这些情况下,由于Artifactory不会在本地存储库中找到工件,它将继续在已定义的远程存储库中搜索它,可能会暴露查询的详细信息,包括完整的工件名称,其中可能包含敏感的业务信息。

此外,如果攻击者获得了内部包名称,他可能会将具有相同名称的恶意包部署到公共存储库。

这可以通过对远程存储库使用Exclude模式来避免。

最佳实践是将所有远程存储库置于一个虚拟存储库之下,并为该虚拟存储库的内部包指定一个Exclude模式。在这种方式下,不会向远程存储库发出内部包的请求。

例子:

包含/排除模式在存储库的基本配置中设置。

下面是NPM和Maven这两个流行包的示例。考虑到这一点,其他包的过程也类似,主要依赖于包布局。

NPM:

”。npm/@my/** "阻止范围@my从远程解析。

”。npm/my-*/** "从远程解析中阻止带有my前缀的包。

”。npm/secret/** "从远程解析阻止包的秘密。

Maven:

阻止在com/acme/exp-project/下的工件的远程解析