我正在嘗試修復 Snyk 工具在我的程式中發現的一些漏洞,但其中一些來自我正在使用的庫(如 Apache 的 Pulsar)。例如,Pulsar 正在使用 2.8.6 版本的 gson,根據 Snyk 的說法,它是易受攻擊的,下一個安全版本是 2.8.9。是否可以強制我使用的所有庫使用 gson 2.8.9 版(通過 gradle)?或者不是因為這是一個非常愚蠢的想法,容易出現意外行為?
謝謝
uj5u.com熱心網友回復:
這是一件合情合理的事情。官方支持升級庫的新版本 pulsar 會更好,但您通常可以安全地升級傳遞依賴項。特別是,如果庫作者遵循語意版本控制,那么單點版本(即 2.8.6 -> 2.8.9)可能是安全的。
Gradle 提供了幾種方法來做到這一點,現在(從 gradle 7.3 開始)似乎最慣用的方法是使用約束。
例如,如果您的依賴項如下所示:
dependencies {
implementation 'org.apache.pulsar:pulsar-client-all:2.9.1'
}
運行依賴洞察將顯示我們正在決議 gson 2.8.6
`./gradlew dependencyInsight --dependency gson`
...
com.google.code.gson:gson:2.8.6
\--- org.apache.pulsar:pulsar-package-core:2.9.1
\--- org.apache.pulsar:pulsar-client-all:2.9.1
\--- compileClasspath
我們可以添加一個約束,強制它使用這樣的新版本。
dependencies {
implementation 'org.apache.pulsar:pulsar-client-all:2.9.1'
constraints {
implementation('com.google.code.gson:gson:2.8.9') {
because 'previous versions have a security vulnerability'
}
}
}
現在我們得到以下結果
com.google.code.gson:gson:2.8.9
...
Selection reasons:
- By constraint : previous versions have a security vulnerability
- By conflict resolution : between versions 2.8.9 and 2.8.6
com.google.code.gson:gson:2.8.9
\--- compileClasspath
com.google.code.gson:gson:2.8.6 -> 2.8.9
\--- org.apache.pulsar:pulsar-package-core:2.9.1
\--- org.apache.pulsar:pulsar-client-all:2.9.1
\--- compileClasspath
它現在像你想要的那樣決議 2.8.9。
Gradle 有相當廣泛的關于依賴管理的檔案,這是查找有關此類事物的更多資訊的好方法。
uj5u.com熱心網友回復:
我不確定這是一個好主意,我認為更新依賴于 gson 穩定版本的 Apache 的 Pulsar 版本是一個更好的主意。
但仍然不是 100% 確定,等待其他澄清。
仍然可以像下面這樣完成您想要的
configurations.all {
exclude group: 'com.google.code.gson:gson:2.8.6'
}
這將排除專案中所有版本為 2.8.6 的 gson。
然后您可以根據需要添加以下版本
implementation 'com.google.code.gson:gson:2.8.9'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408791.html
標籤:
上一篇:洗掉傳遞類路徑依賴-插件塊
