- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下现在的情况:
您是一名开发人员,想参与一个新的(开源)项目。该项目可以通过不同的方式构建——其中之一是 Maven。
如果您现在下载源代码存储库并开始构建过程,根据我的理解,您的系统将面临多种安全风险:
默认的 Maven [plugin-] 存储库是通过 http 访问的 - 通过中间人攻击,有人可以向您发送操纵的包。如果插件存储库被拦截,这可能会导致注入(inject)代码作为构建过程的一部分执行
在文件 pom.xml 中,您可以添加第 3 方存储库和插件存储库。如果攻击者设法将他自己的插件存储库添加到项目 pom.xml(例如,开源项目),则其他人可能会受到这些插件的攻击。对于第 3 方存储库,我不确定 - 在项目 pom.xml 中定义的存储库是否可以覆盖在用户或系统级别定义的存储库?
在我看来,这是严重的安全问题 - 还是描述有误?
如果我有一个基于 Maven 的项目——我如何确保运行 Maven 是安全的?是否有可信赖的存储库列表(仅包含不会损害其执行所在的计算机的代码)?
最佳答案
乍一看你的论点是正确的。但是对于潜在的攻击者来说,有一些问题需要注意或不容易解决。
在大多数情况下使用的存储库是 Maven Central,它在 Sonatype 的控制下(据我所知)。这意味着可以访问这些机器并修改存储库本身的内容,或者只是注入(inject)一些基于校验和可能不是那么简单的内容,但当然这并不意味着不可能。此外,如果您从 Internet 下载工件,则您有一个最新的病毒扫描程序处于事件状态,它会在将其放入您的硬盘驱动器之前首先控制所有内容。这当然不是 100% 安全。
来到第二部分:如果您使用的项目在 pom 中定义存储库,这不是“最佳实践”……好吧……让我们假设一下。因此,您将使用这个“受感染”的项目 pom。但是它是如何投入到项目中的呢?这意味着攻击者必须拥有对该项目的提交访问权限,换句话说,他已经共享该项目很长时间了。此外,该项目的其他人会审查提交...所以这不会那么简单,但当然并非不可能。
根据我之前写的东西,有人怎么能保证存储库仅包含“安全”工件?谁应该控制/检查?将工件放入该存储库需要多长时间?
所以简单的答案是:不,使用 Maven 不是 100% 安全的,但如果我们稍微考虑一下互联网也不是 100% 安全的。在我看来,通过 Internet 的风险比来自 Maven 存储库的风险高得多,但我们当然应该忽略这一点。
唯一可能的解决方案是使用存储库管理器,它是下载工件的唯一来源,这意味着将 settings.xml 配置为仅使用它。并且非常重要的是,您控制放入该存储库的每个工件并对它们进行一些“安全”检查。但是谁会这样做,谁有时间/金钱/资源来做这些事情?
关于security - 马文 : security problems by repository and pluginRepositories defined in pom?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7514421/
我正在使用 Maven 3.x,我的父 pom 和子 pom 中有以下结构。 父类 com.mygoogle.sample workorder 1.0-SNAPSHOT pom 1.0-SN
我已将各个项目中的所有存储库配置重构为一个父 pom,该父 pom 是为了对存储库和分发管理等内容进行单点配置的特定目的而创建的。据我了解,这应该是最佳实践。将我的父 pom 部署到 Nexus 服务
我尝试使用 mvn help:effective-pom 命令在示例应用程序上生成有效的 pom。 http://books.sonatype.com/mvnref-book/reference/po
在一个项目中,我们有一个名为时间戳的属性,它没有在父 POM 和子 POM 中定义,但仍然可以在 pom.xml 中访问。任何线索将不胜感激。 最佳答案 它可以由插件设置(如 https://www.
我在使用“uploadArchives”上传存档时收到“无法初始化 POM pom-default.xml:无法验证 POM”。我也尝试了 maven-publish 插件,但仍然没有成功。我们将不胜
我创建了一个程序,使用 HTML5 canvas 绘制一个 pom pom,参数大小、x、y、蓬松度和颜色。 pom pom 是通过从中心出来的画线创建的,参数蓬松度决定了从中心出来的股数。我有一个确
我正在关注maven的教程。我有一个非常简单的项目,里面有几个模块。在模块 pom 上,我想通过 ${parent.groupid} 和 ${parent.version} 引用主项目 pom 版本和
当我构建我的项目时,我收到以下警告: [INFO] ------------------------------------------------------------------------ [
我正在尝试构建一个 Maven 项目。我的其他团队成员能够毫无问题地构建它。我收到以下错误: [WARNING] The POM for org.hectorclient:hector-core:ja
我目前正在为 Maven 苦苦挣扎:我有一个由几个嵌套模块组成的复杂项目,对于其中一些模块,我在 POM 中有类似的配置。 我想让它干净。实际上,我想定义一个“runnable-jar”通用配置并在某
我正在将 maven Artifact 推送到 nexus,对于版本号小于子 POM 的父 POM 是否有任何影响? 最佳答案 据我所知没有。多模块项目中的模块版本可能以任何可能的方式有所不同。但是,
我在 Eclipse (Helios) 中有一个项目,带有 Maven pom.xml。我的项目是一个将使用 Hibernate、MySQL 的 Web 应用程序。 但是我在正确处理 pom.xml
repository我的 build.grade 部分已: mavenLocal() //maven { url { 'http://192.168.2
在多模块项目结构中 myApp |-moduleA |---pom.xml |-moduleB |---pom.xml |-pom.xml 如果我在 parent.pom 中有以下属性 4
我为 Maven 插件编写了代码,用于更新 pom 文件中的版本号。但是,当我尝试保存新的 pom 时,它被保存为有效的 pom。有没有办法将其保存为解析之前的样子?谢谢! private Maven
我有一个父 pom 在 pluginManagement 中定义了插件的一些配置项,其中有一个特定的配置。我不想在 child pom 中。 我尝试覆盖我的子 pom 中的其他配置项,这有效,但“删除
我不确定这是否受 Maven 支持。我很感激我能得到的任何帮助。 我有一个定义依赖项和排除项的父 pom。我无法更改父 pom: foo bar 1.0
当前场景: 父pom有一个distributionManagement部分,里面定义了两个repositories(releases和snapshots);引用如下: 父 pom:
似乎有几种方法可以在多项目构建中构建父 pom,我想知道是否有人对每种方式的优点/缺点有任何想法。 拥有父 pom 的最简单方法是将其放在项目的根目录中,即 myproject/ myprojec
我想在我的 Maven 项目中定义一个本地存储库。 我有一个 super pom 和几个子模块。我的文件结构是: /root /repository /child po
我是一名优秀的程序员,十分优秀!