未经我的授权,Maven可以将我的源代码上传到Central吗?

时间:2014-02-28 22:39:56

标签: security maven repository

从这个article,我了解到Maven使用一个中心位置来保存开源代码以解决依赖问题。这是一个非常方便的功能。但是,如果我使用Maven构建一些项目,即使没有我的授权,它是否会将我的源代码上传到Internet上的某个地方?

上次当我尝试使用组ID my-secret-service.jar构建com.notarealgroup之类的内容时,执行mvn install会产生如下输出:

Downloading: https://repository.jboss.org/nexus/content/groups/public/com/notarealgroup/my-secret-service/1.0/my-secret-service-1.0.jar

这让我非常困惑:repository.jboss.org如何找到my-secret-service-1.0.jar?它不应该存在(并且确实不存在)。

2 个答案:

答案 0 :(得分:2)

当您引用库时,maven在本地仓库中搜索它,然后,默认情况下,它将搜索公共存储库。它没有上传您的jar,但仍然存在安全问题,它将jar的名称传递给在线仓库。如果你非常偏执(我现在的雇主 那个偏执狂)那么你想要阻止它,为此你必须阅读maven文档。但是,请放心,除非你选择将你的东西部署到公共maven仓库,这无论如何都不容易实现,但这不会偶然发生。

答案 1 :(得分:0)

不,Maven不会这样做,因为任何合理的“授权”定义。

要将您的工件上传到例如中央,你需要:

  • 中心设置为distributionManagement中的上传存储库(SuperPOM中没有默认设置),
  • 您的环境设置为Central的正确上传授权(在您的settings.xml或其他方面),
  • 您明确或隐含地启动部署,这是通过运行deploy阶段可以说是最简单的方法。

这些要求可以从Maven的默认配置派生,特别是在运行mvn install时。在最坏的情况下,您需要将一个专门设计的项目设置为父项,以便发生任何“不必要的”事件。 如有疑问,请检查effective POM

在任何一种情况下,任何人都不能轻易地将任何工件上传到Central - 如果是的话,我们会在这里使用恶意构造的工件。

正如Engineer Dollery在他的回答中提到的那样,你看到的消息是Maven只是试图下载一个依赖项,这恰好由你的自定义坐标(groupId,{artifactId标识。 {1}})。这就把我们带到了你的最后一个问题,我将用另一个问题回答 - 为什么不能它在那里?毕竟,这只是一件神器。