簡體   English   中英

避免 python 中的依賴混淆

[英]Avoiding dependency confusion in python

在我在工作場所工作的 python 項目中,我們使用標准需求文件安裝來自 PyPI 的一些包和來自 Gemfury 的一些私人公司包。

看完這篇文章: https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610

我們的需求文件看起來像:

--index-url <OUR_GEMFURY_URL>
--extra-index-url https://pypi.python.org/simple

aiohttp==3.7.1
simplejson==3.17.1

<our-package>==1.0.0
<our-other-package>==1.2.0

我嘗試閱讀一些 pip 的文檔,但我無法完全理解它如何選擇從哪里下載 package。 例如,如果有人將惡意版本 1.0.0 上傳到 pypi-prod 會發生什么 - pip 怎么知道要使用哪個包? 有沒有辦法為特定的 package 指定 pip 以僅在 --index-url 中搜索它?

如何防止代碼中的依賴混淆? 謝謝您的幫助!

文章提到算法 pip 使用:

  • 檢查指定(內部)package 索引上是否存在庫
  • 檢查公共 package 索引 (PyPI) 上是否存在庫
  • 安裝找到的任何版本。 如果 package 兩者都存在,則默認從具有更高版本號的源安裝。

因此,如果您的腳本需要<our-other-package>>=1.2.0 ,如果它的版本高於您打算安裝的版本,您可以從公共 pypi 服務器獲取一些 mailicios package。

文章中提到的直接解決方案是刪除--extra-index-url

如果package 1.0是內部或外部 package 並且存在於私有 pypi 服務器中,它將從那里下載。

外部包將通過內部 pypi 服務器從公共 pypi 服務器下載,內部 pypi 服務器將緩存它們以供將來使用。

我還建議在 requirements.txt 中有明確的版本,這樣您就可以知道您獲得的版本並通過增加版本來進行有意識的升級。

總結指南(絕不是詳盡的並防止所有可能的安全漏洞)

  • pip.confrequirements.txt和自動化腳本中刪除--extra-index-url https://pypi.python.org/simple
  • 在 requirements.txt 中指定內部和外部包的顯式版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM