没有坏处,

嘿,你的回复中有恶意- pypi是最新被滥用的

开源存储库可能成为恶意的载体,所以在运行之前要仔细查看。

嘿,你的回复中有恶意- pypi是最新被滥用的

一名安全研究人员发现,从官方Python存储库下载了大约5000次的假冒包中包含的密码可以在受感染的机器上安装加密挖掘软件。

安全公司Sonatype的研究员Ax Sharma说,这些恶意程序包可以在PyPI存储库中找到,它们在很多情况下使用的名字都模仿了该存储库中已经存在的合法且经常被广泛使用的程序包报道.所谓的typosquatting攻击成功的原因是目标不小心输入了一个名称,例如输入“mplatlib”或“maratlib”而不是合法和流行的包matplotlib

夏尔马说,他发现了6个安装加密软件的软件包,这些软件将利用受感染计算机的资源挖掘加密货币,并将其存入攻击者的钱包。这六篇文章都是由使用PyPI用户名的人发布的nedog123在某些情况下,早在4月。软件包和下载编号为:

  • maratlib: 2371
  • maratlib1: 379
  • matplatlib-plus: 913
  • mllearnlib: 305
  • mplatlib: 318
  • learninglib: 626

这些恶意代码包含在每个软件包的setup.py文件中。它会导致受感染的计算机使用ubqminer霸王龙Cryptominer挖掘数字货币并将其存入以下地址:0 x510aec7f266557b7de753231820571b13eb31b57

PyPI一直一个经常虐待 存储库自2016年以来,一名大学生欺骗了1.7万名程序员,让他们运行他发布在网站上的粗略脚本。

并不是说PyPI比其他存储库被滥用得更多——去年,包从这里被下载了数千次RubyGems安装了试图拦截比特币支付的恶意软件。在此之前的两年,有人对NPM托管的一个拥有200万用户的代码库进行了后门操作。Sonatype已经跟踪了超过12000个恶意NPM包自2019年以来。

很容易让人认为,在这些事件中统计的相当一部分下载是自动完成的,从未导致计算机被感染,但上述大学生的实验却表明了相反的观点。他的伪造Python模块在1.7万多个独立域名上被执行了4.5万多次,其中一些域名属于美国政府和军事组织。这种滥交从来都不是个好主意,但今后应该被严格禁止。

76年读者评论

  1. 一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。
    |注册了952个帖子
  2. 这就是为什么我们不能拥有美好的东西。
    |注册了729个帖子
  3. 叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。
    5502个帖子|注册
  4. mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    这些缺陷不是被检查代码的人发现的吗?:)它更像是:时间可能不适合你的时间表。
    |注册了2343个帖子
  5. mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    确实。我一直在使用OSS持续集成工具,并考虑使用企业版。我注意到,当从源代码编译时,主要的repo引用了几十个上游项目。因此,我坦率地问他们是如何验证上游回购协议的安全性,以减轻供应链受到的攻击。他们没有得到任何回应,他们的首席开发者也没有做出回应。

    他们的商业模式从来没有进步过,只是做一笔买卖。
    |注册了127个帖子
  6. 这是疯狂的。如今,由于每个项目都有巨大的传递依赖,所以不可能保证提取的库不掺假。缺少对每个工件和源的审核和签名。然而,最薄弱的环节就是审计链。
    |注册了893个帖子
  7. mewmew写道:
    fknuckles写道:
    mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    这些缺陷不是被检查代码的人发现的吗?:)它更像是:时间可能不适合你的时间表。


    对不认识的人微笑是令人毛骨悚然的。

    但我的观点是,开源本身并不意味着任何东西都要经过一致性的审查,就像人们可以假设封闭的源代码要经过审查一样。这是人们的一个坏习惯,他们认为开源是神奇地安全的,纯粹是因为代码可以检查,并假设很多人实际上在做跑腿的工作。


    微笑是人类最基本的非语言暗示之一。它的典型意思是“我没有恶意”。

    你更广泛的观点是有道理的,但在你最初的总结中,细微的差别被忽略了,我只是把它指出来。

    我在这里陈述的是显而易见的事实,但更有可能的情况是,开源软件受到检查只是因为代码对更多人开放,但检查的频率和严格程度是没有定义的,正如您指出的,您不能因此就认为它更安全或更可靠。

    这是一个看起来越来越迫切需要解决的问题。
    |注册了2343个帖子
  8. mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    是的,但是考虑到这里的攻击(寻找键入错误的包),更好的问题是您检查了正确的开放源码包吗?
    870个帖子|注册
  9. jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。


    我同意你对现状的总结——尤其是作为PyPI上一些比较受欢迎的软件包的维护者,缺乏公司花钱支持他们的供应链——但我认为你的结论有点宿命论。我们不能解决这个问题在当前的模型下,但我们可以在很大程度上改变这个游戏:Python打包社区已经开始研究用一些不可执行的东西(例如pyproject.toml)来替换setup.py,我们可以从沙盒和检查中获得很多好处,但带来的痛苦程度各不相同。

    例如,它将是有趣的探索选项,如有不同的安装要求的包使用像exec, ctypes或subprocess,或像使用沙盒框架MacOS, Windows, Linux等,所以你可以“pip install foo”任何不想访问任意文件,但需要某种额外的批准,以允许访问项目目录外的文件系统或运行其他进程。我想知道是否存在某种污染机制,您基本上必须在包中声明所需的特权,并使用沙箱策略只允许声明的访问,并通过一些社区工作来迁移现有的包。

    我并不是说这很容易,但我认为摆脱这一问题的唯一方法是改变模式,使其不平衡。这有点像我们没有通过告诉每个人开车时要小心来减少车祸,而是通过立法规定安全玻璃、更好的刹车、安全气囊等来减少车祸。
    |注册了2628个帖子
  10. jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。


    我希望有更多的标准库。c++、Java和Go都有很好的丰富的语言。这违背了javascript的精神,但它会有所帮助(我认为)。
    |注册了6013个职位
  11. jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。


    完全正确。我参与了一家初创公司的代码出售给一家财富500强公司的交易。大公司iirc聘请了一家安全公司来审查我们使用的每一个图书馆。因此,我编译了每个库的列表,递归地链接到我们的代码库中。结果发现,我们有大约100个库直接链接,但递归计数超过1万个。作为一家初创公司,我们不可能去研究,或者花钱请人去研究这些。你必须是一家富有的公司才能做到这一点(这是买家的最佳实践)。

    但是,每个说“查遍所有图书馆”的人实际上从来没有这么做过,或者他们在一家资金雄厚的公司工作。并不是每个人都在这种情况下编码。
    |注册了3662个帖子
  12. adamsc写道:
    jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。


    我同意你对现状的总结——尤其是作为PyPI上一些比较受欢迎的软件包的维护者,缺乏公司花钱支持他们的供应链——但我认为你的结论有点宿命论。我们不能解决这个问题在当前的模型下,但我们可以在很大程度上改变这个游戏:Python打包社区已经开始研究用一些不可执行的东西(例如pyproject.toml)来替换setup.py,我们可以从沙盒和检查中获得很多好处,但带来的痛苦程度各不相同。

    例如,它将是有趣的探索选项,如有不同的安装要求的包使用像exec, ctypes或subprocess,或像使用沙盒框架MacOS, Windows, Linux等,所以你可以“pip install foo”任何不想访问任意文件,但需要某种额外的批准,以允许访问项目目录外的文件系统或运行其他进程。我想知道是否存在某种污染机制,您基本上必须在包中声明所需的特权,并使用沙箱策略只允许声明的访问,并通过一些社区工作来迁移现有的包。

    我并不是说这很容易,但我认为摆脱这一问题的唯一方法是改变模式,使其不平衡。这有点像我们没有通过告诉每个人开车时要小心来减少车祸,而是通过立法规定安全玻璃、更好的刹车、安全气囊等来减少车祸。



    这肯定会有帮助,但它仍然使代码库本身容易受到太阳风的攻击。如果开发人员安装了一个有毒的库,并将其推送到生产web服务器,那么即使代码是沙盒的,这仍然是一个巨大的问题。它会有http访问权限,并连接到数据库服务器。游戏结束了。防止更多的加密攻击会很好,但我不确定我们如何在不影响生产力的情况下真正解决这个问题。

    也许是一些经过批准和审查的已知优秀库和版本的白名单?这当然是棘手和不愉快的。
    |注册了3662个帖子
  13. mewmew写道:

    对不认识的人微笑是令人毛骨悚然的。


    图像
    |注册了14661个帖子
  14. 有PyPI,然后有Conda/Mamba通道,位于通常发行版特定存储库的顶部。与PyPI不同——conda不仅仅用于python环境/包管理——例如Bioconda通道还提供常用的生物信息学包的二进制文件。这些渠道通常由人们在空闲时间管理,没有任何金钱激励。

    因为他们不可能在一个小的版本更改或其他小的事情之后调查每个配方,而且大多数配方都是与上游链接的(这就带来了另一个问题,例如。整个巴布亚灾难)。

    我猜最终会有一个主动的*nix“反病毒”,因为围绕软件包及其源代码的复杂工具链。

    编辑:-不是我喜欢另一个程序在系统中引入更多漏洞的想法,但正如上面所讨论的,像有毒的库这样的向量是很难管理的,需要一些主动的东西来防御它们。
    |注册了135个帖子
  15. 所以…是时候开始严格执行requirements.txt文件的使用了?
    |注册了98个帖子
  16. mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。

    是的,这是我经常对那些经常宣扬某个开源软件而妖魔化另一个开源软件的人的评论。

    没有人会完全检查他们运行的所有代码。没时间了。所以在大多数情况下,你假设别人有——软件通常有一个“别人的问题”领域。对于封闭源代码,这是出于设计的考虑,因为你假设公司中有人负责检查代码,如果它真的很糟糕,公司(以某种方式)应该负责。对于开放源码,您只需要假设其他人已经查看过。问题是大多数人都是这么想的,所以通常不会去关注它,除了那些积极参与的人,他们可能是不好的行为者(见四月的故事当两名大学研究人员试图故意为一篇论文提交糟糕的代码时)。

    事实证明,一些真正重要的代码库的源代码没有被很多人读取——这是多久以前的事了?(26个月!)

    谁是罪魁祸首?没有一个人。因为在许多情况下不容易知道这是故意的还是偶然的,或者在某些情况下是谁贡献了代码。没有人负责,除了你自己,这意味着你必须阅读所有的代码,没有人有时间这样做。
    2253个帖子|注册
  17. fknuckles写道:
    mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    这些缺陷不是被检查代码的人发现的吗?:)它更像是:时间可能不适合你的时间表。

    完全正确。这就是为什么药用药物需要一段时间才能被批准(或被拒绝)。

    用“Vetted by [name]”标记某些版本,其中[name]是著名的代码检查员的名字,他仔细检查了自上次审查以来的所有更改。
    优秀的检查员最终会建立声誉,甚至可能以此为事业。
    注册了1887个职位
  18. 引用:
    这种滥交从来都不是个好主意,但今后应该被严格禁止。


    这句话出乎意料。你是在提议法律惩罚吗?是针对黑客还是针对包装消费者?

    或者你只是说应该有组织政策反对使用OSS包回购吗?或者每一行入厂包裹的代码都需要检查?
    |注册了2289个帖子
  19. 这是头部图像中一些看起来很奇怪的Python代码。Python 4000看起来很像Java!
    |注册了450个帖子
  20. mewmew写道:
    …没有人负责,除了你自己,这意味着你必须阅读所有的代码,没有人有时间这样做。


    你的意思是,“没人愿意花时间做这件事”。这里的“一个”是你或你的组织,等等。我觉得这是现代软件开发的一大缺陷。每个人都在竞相尽快推出“最小可行产品”。然后,他们震惊地举起手,因为弱点不断出现。

    我现在要打老人牌了。我曾经在c/c++/asm方面有过经验。如果你想重用代码,你必须手动输入或剪切/粘贴。我觉得这让你对代码中发生的事情有了更深刻的认识。类似的,如果你把一个问题写出来,而不是把它记在脑子里,你就能更好地理解它。但我明白,那些日子已经像马车一样过去了。我承认我在几年前的一节Android开发课上受到了一些文化冲击,在那节课上我们学习了如何(并且需要)使用依赖注入。我完全被震惊了;自动抓取代码从互联网上没有看和编译它到我的项目?!疯了。 I can only assume that kind of use of third party code is a big part of the modern day CS teaching.

    就文章所述,这些都是由于拼写错误。这似乎只能在人类层面上被治愈,缺乏某种暗示正确回购的智能感知。
    |注册了260个帖子
  21. 让我们面对现实吧,这并不奇怪。当然,我可以检查一些我下载的存储库,但我将,答案很可能是否定的。时间的限制、对代码和语言的熟悉都会大大降低您的速度,但仍然不能保证您能抓住它。

    我知道这是一个例子,但如果有人做过类似的事情 http://www.underhanded-c.org/ 我相信随便检查一下,也不会发现什么恶意的东西。在某些情况下,我知道里面一定有不好的东西,因为这是一场比赛,但直到他们解释我才明白。
    |注册了195个帖子
  22. mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    恶意代码被嵌入到文件中setup . py很多人在检查代码的时候会跳过或者只是快速浏览一下。差不多有400行设置。什么有趣的。事实上,恶意代码可能只是几行import语句。谁有时间看啊?在进行代码评审时,任何人都很难发现它。

    几年前,Perl的CPAN存储库被发现有一个活跃的漏洞。漏洞并不在模块代码中,而是在安装期间运行的测试代码中。疯狂的是,测试代码没有改变,但测试代码从远程服务器下载了一个文件。最初,那个文件并不是一个漏洞。然而,接管服务器的人修改了文件来利用这个漏洞。

    仅仅是“开源”和每个人都能看到代码是不够好的。不是所有的开发人员都能花时间和费用检查每一行代码。
    2907个帖子|注册
  23. fknuckles写道:
    mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    这些缺陷不是被检查代码的人发现的吗?:)它更像是:时间可能不适合你的时间表。

    审计已经在这里了,只是分布不均?
    |注册1405个帖子
  24. 请原谅我的无知——真的——但如果恶意包托管在官方Python存储库上,这不是一个相当容易(如果长期)解决的问题吗?

    官方存储库的维护者可能不允许来自不受信任的程序员的贡献。不受信任的程序员可能会产生另一个风险更高的存储库。

    程序员如何获得信任,我留给读者一个练习,但原则上,这似乎很简单,如果与开源精神相悖。

    在我看来,Python是一种高风险的、被广泛使用的语言,几乎没有理由让任何老yahoo能够发布typosquatting包。
    |注册了9个帖子
  25. 明确的写道:
    adamsc写道:
    jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。


    我同意你对现状的总结——尤其是作为PyPI上一些比较受欢迎的软件包的维护者,缺乏公司花钱支持他们的供应链——但我认为你的结论有点宿命论。我们不能解决这个问题在当前的模型下,但我们可以在很大程度上改变这个游戏:Python打包社区已经开始研究用一些不可执行的东西(例如pyproject.toml)来替换setup.py,我们可以从沙盒和检查中获得很多好处,但带来的痛苦程度各不相同。

    例如,它将是有趣的探索选项,如有不同的安装要求的包使用像exec, ctypes或subprocess,或像使用沙盒框架MacOS, Windows, Linux等,所以你可以“pip install foo”任何不想访问任意文件,但需要某种额外的批准,以允许访问项目目录外的文件系统或运行其他进程。我想知道是否存在某种污染机制,您基本上必须在包中声明所需的特权,并使用沙箱策略只允许声明的访问,并通过一些社区工作来迁移现有的包。

    我并不是说这很容易,但我认为摆脱这一问题的唯一方法是改变模式,使其不平衡。这有点像我们没有通过告诉每个人开车时要小心来减少车祸,而是通过立法规定安全玻璃、更好的刹车、安全气囊等来减少车祸。



    这肯定会有帮助,但它仍然使代码库本身容易受到太阳风的攻击。如果开发人员安装了一个有毒的库,并将其推送到生产web服务器,那么即使代码是沙盒的,这仍然是一个巨大的问题。它会有http访问权限,并连接到数据库服务器。游戏结束了。防止更多的加密攻击会很好,但我不确定我们如何在不影响生产力的情况下真正解决这个问题。

    也许是一些经过批准和审查的已知优秀库和版本的白名单?这当然是棘手和不愉快的。


    它肯定不是完美的,但它会让捍卫者更容易一些,例如,如果你安装的每个库都有一个清单,说明它是否需要网络或文件系统访问,以及它的范围有多广,这样你就可以更多地关注那些需要访问的,特别是当一个库作为新版本的一部分改变了请求的访问级别时。即使进程本身需要发出网络请求,也不一定意味着该进程中使用的所有100个库都要发出请求。如果您能将范围缩小到可以用于为系统级沙箱工具或代理生成更细致的策略的级别,那将是特别有趣的(“我需要网络访问,但只需要443端口到*.googleapis.com”或“我需要文件系统访问,但只需要读取x509 CA存储和配置文件”)。

    SolarWinds几乎是最难防御的案例,因为它完全被破坏了而且这类软件需要非常广泛的访问级别。我肯定会考虑如何阻止这种情况,但我认为仍然有很多价值,这些措施可能不会阻止这种情况,但会让它更容易捕捉,同时阻止更容易的事情,如云凭证/加密钱包驱动器攻击。
    |注册了2628个帖子
  26. “这种滥交从来都不是个好主意,但今后应该严格禁止。”

    怎么做?其中一些包的名称有点生硬。它们都托管在一个“可信”的存储库站点上。

    我能在我的客户端上启用什么功能来“禁止”它下载这些损坏的软件包?他们是无符号吗?(有多少合法的包裹被签名?)说真的,我怎么配置我的PC(或Pi),使这些内容不会被意外拉下?

    我是否需要一个苹果控制的图书馆“商店”?: - p

    在VS(和Code)中,我使用/nuget/之类的东西来下载库和插件(对于Code)。我看了出版商的声明,看看有没有签名。我倾向于相信来自微软和Newtonsoft的——但其他我从未听说过的(尤其是Code扩展)。

    对于NPM -我下载了一个“看起来可信”的包。但这可能会在以后增加一个新的依赖。npm安装婴儿。有些东西可能是我不知道的(是的,我们经常查看npm审计的结果)。
    710个职位|注册
  27. Carpetsmoker写道:
    这是头部图像中一些看起来很奇怪的Python代码。Python 4000看起来很像Java!

    真的吗?因为我觉得它看起来更像Visual Basic!
    |注册了735个帖子
  28. 有越来越多的工具可以解决这个问题。主要归结为“我们将为您审查包,我们的包管理器只允许您下载我们认为安全的代码”。另一种选择就是小心谨慎。不要轻率地升级到最新版本。检查您正在下载的软件包是否有拼写错误。

    免费的公共包管理器是一件好事,但它们对企业来说是有风险的,就像你从网上下载的任何其他软件一样,需要小心。
    798个帖子|注册
  29. Powerlord写道:
    Carpetsmoker写道:
    这是头部图像中一些看起来很奇怪的Python代码。Python 4000看起来很像Java!

    真的吗?因为我觉得它看起来更像Visual Basic!

    我想知道为什么1不是质数。不包括1的质数的定义似乎相当武断。

    编辑:维基百科实际上有一个在这个节
    引用:
    原始的

    大多数早期希腊人甚至不认为1是一个数字,所以他们不能认为它是质数。当时的一些数学家也认为质数是奇数的细分,所以他们也不认为2是质数。然而,欧几里得和大多数其他希腊数学家都认为2是质数。中世纪的伊斯兰数学家很大程度上跟随希腊人,认为1不是一个数字到了中世纪和文艺复兴时期,数学家们开始把1当作一个数,有些人还把它作为第一个质数18世纪中期,克里斯蒂安·哥德巴赫在与莱昂哈德·欧拉的通信中将1列为质数;然而,欧拉本人并不认为1是质数在19世纪,许多数学家仍然认为1是质数,直到1956年,包含1的质数列表还在继续发表

    如果将质数的定义改为称1为质数,那么许多涉及质数的表述就需要用一种更尴尬的方式来改写。例如,算术基本定理需要用因子分解的方式重新表述为大于1的质数,因为每个数字都有多个因子分解,1的拷贝数不同类似地,如果将1作为质数处理,埃拉托色尼的筛法也不会正确工作,因为它将消除1的所有倍数(即所有其他数字),只输出单个数字1质数的其他一些更专业的性质对1也不成立:例如,欧拉totient函数或除数和函数的公式对于质数和1是不同的到20世纪初,数学家们开始同意1不应被列为素数,而应作为一个特殊的“单位”
    |注册了10177个帖子
  30. npm和PyPI当然可以更新他们的客户端,这样,如果你试图下载一个看起来像另一个流行包但下载量少得多的包,它们就会发出响亮的警告。它们还可能要求新包的名称与流行包的名称大不相同。
    798个帖子|注册
  31. 我一直不明白为什么每个人都不从左到右导入依赖,而且通常不是通过具体的版本号,而是“最新”。

    我们只使用特定的版本号,并在构建系统中自己托管重要的东西。的确,它不能阻止不良代码进入供应链,但如果我们总是在一个断开连接的副本上落后一年,我们就不太可能成为零号病人。
    注册了292个帖子|
  32. mewmew写道:
    一个很好的提醒,只是因为某人可以检查开放源代码的bug或恶意更改,这并不意味着任何人检查代码。


    这听起来像是一个很好的理由,让某人建立一个开源审计小组。
    1158个帖子|注册
  33. foobarian写道:
    免费的公共包管理器是一件好事,但它们对企业来说是有风险的,就像你从网上下载的任何其他软件一样,需要小心。

    人们可能会认为,企业开发的项目预算较高,时间期限较长,因此也需要仔细检查所有内部和第三方部件。

    但这种假设往往是错误的。
    注册了1887个职位
  34. perholmes写道:
    我一直不明白为什么每个人都不从左到右导入依赖,而且通常不是通过具体的版本号,而是“最新”。

    我们只使用特定的版本号,并在构建系统中自己托管重要的东西。的确,它不能阻止不良代码进入供应链,但如果我们总是在一个断开连接的副本上落后一年,我们就不太可能成为零号病人。


    我在“下载任何依赖自动运行它的请求”,而不是“失败在$ dependency没有安装在本地环境”或可能“失败在$ dependency没有在本地网络回购”。这就是现在的情况,对吧?天啊,你真是又懒又笨。

    至少可以有一个导入白名单之类的linter,对吧?
    |注册了72个帖子
  35. 我认为缓解这种情况的唯一方法是,你有一个第三方来提取库,并对代码进行一些自动或手动扫描,你在从第三方下载之前支付服务费用。问题是,有太多的图书馆,他们只能通过300个最受欢迎的图书馆来处理。

    我知道,即使对我自己来说,有时我尝试做一个实验,只是为了看看它是否可行,我需要快速地完成它,我不会花几天时间来检查代码,只是为了30分钟的努力,看看它是否符合我想要的。

    这类问题不会按照目前的结构消失。
    |注册了453个帖子
  36. adamsc写道:
    jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。


    我同意你对现状的总结——尤其是作为PyPI上一些比较受欢迎的软件包的维护者,缺乏公司花钱支持他们的供应链——但我认为你的结论有点宿命论。我们不能解决这个问题在当前的模型下,但我们可以在很大程度上改变这个游戏:Python打包社区已经开始研究用一些不可执行的东西(例如pyproject.toml)来替换setup.py,我们可以从沙盒和检查中获得很多好处,但带来的痛苦程度各不相同。

    例如,它将是有趣的探索选项,如有不同的安装要求的包使用像exec, ctypes或subprocess,或像使用沙盒框架MacOS, Windows, Linux等,所以你可以“pip install foo”任何不想访问任意文件,但需要某种额外的批准,以允许访问项目目录外的文件系统或运行其他进程。我想知道是否存在某种污染机制,您基本上必须在包中声明所需的特权,并使用沙箱策略只允许声明的访问,并通过一些社区工作来迁移现有的包。

    我并不是说这很容易,但我认为摆脱这一问题的唯一方法是改变模式,使其不平衡。这有点像我们没有通过告诉每个人开车时要小心来减少车祸,而是通过立法规定安全玻璃、更好的刹车、安全气囊等来减少车祸。


    不要忘了,有些库不引用对另一个库的依赖,而是打包在自己的库中。
    |注册了24680个帖子
  37. 条条大路通到自己的依赖地狱。

    Pypi至少应该有两个独立的存储库:一个仅限于已建立的包,另一个开放,用户安装包的风险自负。默认模式应该是访问已建立的repo中的代码,安装需要一个特定的标志来允许来自开放包存储库的依赖。它不能解决问题,但至少使这个问题对一个非营利性组织来说更容易管理,并为行业提供了捐赠资金来帮助保护皮皮的激励。
    |注册了1079个帖子
  38. jhodge写道:
    叹气-只是从我昨天关于勒索软件的评论中复制粘贴,这样我就不需要在这里重新输入了,好吗?

    短版本:我们不打算修复这个问题,不是因为我们不知道该怎么做(在将第三方代码整合到您的项目中之前审核它,托管您自己的已知好的版本,升级时重复),而是因为这样做的难度和费用对大多数组织来说太大了,无法承受。

    说实话,有多少开发团队有时间、人才和资源去审核他们的第三方代码供应链,特别是当你一直在追逐依赖的时候?我敢打赌答案接近于零,不承认有什么区别。

    其次,从信誉良好的源代码获取代码,检查签名,控制版本,只有在有理由升级时才升级,这是更容易实现的,但除非有人在某处执行“审核代码”步骤,否则当类似的事情发生时,你会陷入困境。



    听起来我们需要一个数字公共卫生部门,像现在的公共卫生部门有食品安全、x光设备和其他检查人员一样有代码检查人员!
    注册了2100个post |

你必须置评。

通道Ars Technica