我是 Maven 的新手,并试图将其用于 Android 构建。我心中有这个疑问,这也是由 Jason Van Zyl在这里的采访引发的。
我的问题
如何确保我们从 Maven Central 下载的依赖项没有恶意软件或没有损坏?
你永远不能确定它没有恶意软件,即它总是有可能的。
Maven Central 托管开源项目,因此源代码始终可以从某个地方获得,因此如果您需要确保没有恶意软件并确保兼容的许可条款,您应该下载源代码并自行构建,而不是使用 Maven Central。
我敢肯定,如果工件中确实包含恶意软件,那么运行 Maven Central 的人员会根据相关政策来调查此类事情并进行处理。
...
重无贪污。Maven 对许多事情使用哈希摘要来确保数据无损坏,您的 Maven 客户端和 Maven 存储库可以配置为始终验证。服务器上的文件通常还具有数据校验和的 *.md5 或 *.sha1 URL。
JAR 本身也有内在的校验和。它们基于 ZIP 文件,并且它们确实具有应该检测大多数损坏的校验和方案。ZIP 目录始终位于文件的末尾,因此也会检测到短/截断的文件。
显然,这些机制不是 100% 可靠,但可能被认为是 99.99% 可靠。
...
作为一个软件生产者,把东西放在 Maven 中心。我会敦促你总是在你的 JAR 上签名。这是一种机制,允许每个独立的软件生产者签署他们生产的原始 JAR,然后通过互联网上的任何机制分发它。任何用户(理论上)都可以从任何来源下载它,并能够验证它没有被篡改。
不幸的是,Maven Central 没有确保源代码与二进制文件一起可用的策略,或者没有强制执行 JAR 签名的策略。因此,从安全的角度来看,Maven Central 有助于让您的本地开发顺利进行,但如果您确实关心安全性,请不要使用它。
您需要实施自己的安全策略(或支付他人费用)以代表您实施。
要管理您的安全环境,您可能希望查看可以在本地网络上运行的 Maven 存储库之一,例如 Sonatype Nexus(这是开源和免费版本,启用了大多数功能)。
...
注意我没有阅读您提供的链接,但现在可以阅读。
建议自己构建软件而不是从中央存储库下载它是一个非常糟糕的主意。上传到中心的内容受到非常严密的保护,您可以在 settings.xml 中为 Maven 执行的每次下载启用严格的校验和检查。
如果校验和匹配,您将在中央拥有工件的精确副本,并且在上传期间它们会受到非常密切的监控,并且一旦上传就不会更改。
此外,您只能通过公司控制的存储库管理器(例如 Nexus)间接使用 Central,如果您需要更多的安全性、许可和审计工具和报告,您可以查看 Sonatype Nexus Professional 和 Sonatype Insight 等工具或类似产品。