首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

npm 生态系统存在巨大的安全隐患

现在,用户可以通过向对应的包 URI(例如 https://registry.npmjs.com/-/)向 registry.npmjs.com 发送 PUT 请求来发布 npm...在这里要强调的关键点是,目前生态系统错误地认为 manifest 总是包含 tarball 的 package.json 的内容(这在很大程度上是因为缺乏注册表 API 文档以及 docs.npmjs.com...npm@6 执行 manifest 不存在的安装脚本,反之亦然 安装一个格式错误的依赖项:npx npm@6 install darcyclarke-manifest-pkg@2.1.13 请注意,即使...据我所知,GitHub 首次意识这个问题是在 2022 年 11 月 4 日左右;经过独立研究后,我相信这个问题的潜在影响/风险实际上比最初理解的要大得多,我于 3 月 9 日提交了一份包含我的发现的...GitHub 正陷入不可逆转的困境。事实上,npmjs.com 这种方式已经运行了十多年了,这意味着当前的状态几乎已经无法打破。

23920

package.json 详解

package.json 文件使 npm 可以启动你的项目、运行脚本、安装依赖项、发布 NPM 注册表以及许多其他有用的任务。...即使你没有把项目发布 NPM 注册表,或者没有将其公开发布给其他人,那么 package.json 对于开发流程仍然至关重要。...如果将软件包发布 NPM,则 name 属性是必需的,并且必须是唯一的。如果尝试用 NPM 注册表上当前已经使用的名称发布程序包,则会收到错误消息。...当用户搜索 NPM 注册表时,该字符串用于帮助了解软件包。这应该是软件包的简短摘要。 即使你没有将其发布 NPM 注册表,它也可以用作项目的简单文档。...NPM 注册表会为该字段建立索引,能够在有人搜索软件包时帮助找到它们。数组的每个值都是与你的程序包关联的一个关键字。 如果你不发布 NPM 注册表,则这个字段用处不大,可以忽略它。

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    带你深入了解NPM——NPM初学者指南

    它将为您提供已安装软件包的报告,其当前版本,package.json文件期望的版本以及主注册表发布的最新版本。 owner:允许您管理包所有者。...正式发布包 编码完成后,将有效的package.json放置到你的目录,并编写尽可能完善的readme.md文件,您就可以发布了。...要执行发布操作,您必须做两件事: 使用npm CLI 登录您的NPM帐户(如果您已经有了账号)。 发布您的代码。 也就是只需两步,就能简单的完成发布。...登陆: $ npm login 将提示您输入凭据,一旦您成功登录,您可以再输入: $ npm publish 请在项目的文件夹执行此操作,否则第二个命令将失败。...因此,如果您遇到重复的名称错误(考虑NPM已经有重名的包了),那么您就必须进行更改一个再次发布了。 结论 感谢阅读,我希望到现在为止,你已经了解了NPM的复杂性和美感。

    1.8K20

    2023 年度状态之 Npm

    数量庞大的软件包最受欢迎的库,我们将探索这个为 JavaScript 社区提供动力的强大机构的内部运作。...通过弃用软件包,开发者可以了解该软件包已不再被积极维护,因此应该寻找替代品。 另一方面,取消发布软件包指的是 npm 注册表完全删除该软件包。...这一操作是不可逆的,会永久删除软件包,使其他开发者无法访问。一般不鼓励解除发布,因为这会破坏依赖该软件包的其他项目。不过,在意外发布敏感信息等特殊情况下,开发者可以选择取消发布以降低潜在风险。...npm 软件包的大小差异很大,很小的实用程序库具有广泛依赖关系的大型框架,不一而足。 一般来说,较小的软件包因其效率高、安装快而更受青睐,而较大的软件包可能会提供更强大的功能和特性集。...Sandworm已检测到去年发布的至少 56 万个垃圾软件包。考虑软件包的历史增长率,我们估计实际数量大约在 100 万个垃圾软件包左右,约占整个注册表大小的三分之一。

    31910

    你真的了解package.json吗?

    如何在 npm发布二进制文件? 主要介绍如何将二进制文件发布npm上。 然后,在写这系列文章时,发现有些操作需要用到package.json的属性。...如果使用和 npmjs已经存在的名称发布包,将收到错误。 如果不将包发布npmjs,那么项目的name字段就没有那么多要求。...optionalDependencies 当找不到或无法安装依赖项时,npm install 命令会退出并显示错误。...publishConfig 的常见使用场景: 指定私有注册表,用于企业内部发布包 为预发布的版本添加特殊 tag,如 next 发布不同注册表的同名包,用 tag 进行区分 所以 publishConfig...可以很好地自定义包的发布过程,将其发布特定的注册表或添加自定义标签。

    21810

    全方位解读 package.json

    次重要(可以当百科全书) name(项目名称) 这个名称和你要发布项目npm上的有关系。 假如你不想发布的话那这个name和version就不是必填项了 名字就是你的东西叫什么。...文件包含了“的package.json#文件”栏无法通过排除.npmignore或.gitignore。...:user/repo", "repository": "gitlab:user/repo" } 如果package.json您的包的 不在根目录(例如,如果它是 monorepo 的一部分),...由于NPM V7的,peerDependencies被 默认安装。 如果无法正确解析树,尝试安装具有冲突要求的另一个插件可能会导致错误。...如果您想设置标记、注册表或访问权限,这将特别方便,这样您就可以确保给定的包没有被标记为“最新”、未发布全局公共注册表或默认情况下范围模块是私有的。 查看config可覆盖的配置选项列表。

    1.5K21

    深入学习 package.json 这个基础文件

    次重要(可以当百科全书) name(项目名称) 这个名称和你要发布项目npm上的有关系。 假如你不想发布的话那这个name和version就不是必填项了 名字就是你的东西叫什么。...文件包含了“的package.json#文件”栏无法通过排除.npmignore或.gitignore。...:user/repo", "repository": "gitlab:user/repo" } 如果package.json您的包的 不在根目录(例如,如果它是 monorepo 的一部分),...由于NPM V7的,peerDependencies被 默认安装。 如果无法正确解析树,尝试安装具有冲突要求的另一个插件可能会导致错误。...如果您想设置标记、注册表或访问权限,这将特别方便,这样您就可以确保给定的包没有被标记为“最新”、未发布全局公共注册表或默认情况下范围模块是私有的。 查看config可覆盖的配置选项列表。

    1.2K21

    你真的了解package.json吗?

    如何在 npm发布二进制文件? 主要介绍如何将二进制文件发布npm上。 然后,在写这系列文章时,发现有些操作需要用到package.json的属性。...如果使用和 npmjs已经存在的名称发布包,将收到错误。 如果不将包发布npmjs,那么项目的name字段就没有那么多要求。...optionalDependencies 当找不到或无法安装依赖项时,npm install 命令会退出并显示错误。...publishConfig 的常见使用场景: 指定私有注册表,用于企业内部发布包 为预发布的版本添加特殊 tag,如 next 发布不同注册表的同名包,用 tag 进行区分 所以 publishConfig...可以很好地自定义包的发布过程,将其发布特定的注册表或添加自定义标签。

    11710

    10万 npm 用户账号信息被窃、日志中保存明文密码,GitHub安全问题何时休?

    经过日志和事件分析以及检查所有 npm 软件包版本的哈希值后,GitHub“目前确信攻击者没有修改注册表的任何已公开的软件包,也没有对现有软件包发布任何新版本”。...另外,在这次的事件调查GitHub 还表示发现了存储在 npm 注册表内部日志的一些明文凭证。...在 github 上执行一次搜索删除密码操作可以发现,在 repo 存储密码的情况非常普遍,简单的搜索就返回来 51 万次 commit 记录,这还没有覆盖没有填写详细的 commit 信息,或者已经通过删除历史记录来掩饰活动的情况...减轻这种风险最简单方法是在提交到分支之前不在代码存储凭据和敏感数据。但是,可能会发生一些错误。...为编程层面防止错误情况的发生,可以在 CI 和 CD 管道中使用 git-secrets 等工具,通过中断构建过程来防止带有敏感数据的代码到达 GitHub

    1.8K20

    Npm vs Yarn 之备忘大全

    该网站是用户发现软件包的主要工具,注册表是一个关于软件包信息的大型数据库,而 CLI 则是开发者如何在注册表发布他们的软件包或下载他们希望安装的软件包。...它并没有试图完全取代 npm。Yarn 同样是一个 npm 注册源获取模块的新的 CLI 客户端。注册的方式不会有任何变化 —— 你同样可以正常获取与发布包。...npm link yarn link 开发时链接依赖包,以便在其他项目中使用 npm unlink yarn unlink 取消链接依赖包 npm publish yarn publish 将包发布.../node_modules/.bin,那么该如何项目根目录调用它呢?...理想状态下使用语义化版本发布补丁不会包含大的变化,但不幸的是这必非真理。npm 的这种策略,有可能导致两台拥有相同 package.json 文件的机子,实际上安装了不同版本的包,这可能导致一些错误

    1.6K90

    Npm vs Yarn 之备忘详单

    该网站是用户发现软件包的主要工具,注册表是一个关于软件包信息的大型数据库,而 CLI 则是开发者如何在注册表发布他们的软件包或下载他们希望安装的软件包。...它并没有试图完全取代 npm。Yarn 同样是一个 npm 注册源获取模块的新的 CLI 客户端。注册的方式不会有任何变化 —— 你同样可以正常获取与发布包。...npm link yarn link 开发时链接依赖包,以便在其他项目中使用 npm unlink yarn unlink 取消链接依赖包 npm publish yarn publish 将包发布.../node_modules/.bin,那么该如何项目根目录调用它呢?...理想状态下使用语义化版本发布补丁不会包含大的变化,但不幸的是这必非真理。npm 的这种策略,有可能导致两台拥有相同 package.json 文件的机子,实际上安装了不同版本的包,这可能导致一些错误

    1.4K30

    GitHub喜提npm:最大的包管理工具,JS版的「pip」

    器之心报道 参与:思、张倩、Jamin 刚刚,全球最大的代(tong)码(xing)托(jiao)管(you)平台 GitHub 发布公告称,该公司已经签署了一份收购 npm 的协议,后者是深受开发者欢迎的...收购完成后,npm 公共注册表用户可以继续免费使用,付费用户可以在不久之后将私有 npm 包迁移到 GitHub Package。 ?...JS 是最大的开发者社区之一,而 npm 是世界上最大的软件注册表,在「下载包、安装包、上传包」这一流程npm 是开发生态不可或缺的一环。...此外,GitHub 还打算将其打赏功能(GitHub Sponsors)扩展 npm 的生态。...今年晚些时候,GitHub 将允许 npm 的付费用户将他们的私有 npm 包迁移到 GitHub Package,使得 npm 专注成为一个开放、免费的 JavaScript 软件包管理工具。

    69610

    GitHub宣布正式收购npm

    刚刚,代码共享平台 GitHub 发布公告称,该公司已经正式收购广受欢迎的开源 Javascript 包管理服务 npm。...npm 全拼为 Node Package Manager,是 JavaScript 软件包管理器。自打十年前首次发布以来便深受好评,目前已经是全世界最大的开发者生态系统了。...至于 npm 的未来去向,博客称将集成 GitHubnpm 来提高开源软件供应链的安全性,并使开发者能够跟踪 GitHub 拉取请求修复它的 npm 软件包版本的更改。...未来,npm 注册表免费进行开源开发,并继续改进 npm CLI。在 GitHub 上,npm 将获得全球最大的公司之一的支持,其背后是世界上最大的开发人员社区。...纯开源模式起家,做出商业化的探索,再到最终被大体量厂商收购,这是开源软件厂商宿命般的归宿。 开源的最大受益者是谁?可以是很多人:开发者、中小型公司,还有那些被开源厂商视作吸血鬼的云厂商。

    47660

    又见古老的Typosquatting攻击:这次入侵了Npm窃取开发者身份凭证

    而上面提到的npm其实是node.js的package管理工具。开发人员会封装一些常用功能的代码发布Node.js上,这样其他的人员就可以复用类似功能的代码,而不必重新造轮子。...Silverio在博客说,这些package的命名绝对是故意、恶意的,目的就是为了欺骗用户,并最终收集用户数据。好在hacktask发布的所有package都已经npm移除。...Silverio对这次攻击的效果表示了怀疑,她说:“通过拼写错误来将恶意软件倒入注册表的手段并不高明,因为人们更倾向于使用搜索或者复制粘贴已发布的代码。...她说:“虽然我们在发布的过程无法随时随刻的掌控一切,但我们建立了一个运行良好的系统”,Silverio称赞了npm社区的警惕性。...很明显,垃圾信息的发布者希望搜索引擎检索README文件,来提高自己的网站排名。

    1.4K40

    【译】发布你自己的npm

    备注:npm模块有个神奇的样板。这篇文章是基于我设置中学到的东西。 如今,NPM已经成为javascript库的事实上的注册表。...通常,我们会在代码引入实用包,比如typy,sugar,并轻松的使用它们。 那么,你有没有想过编写自己的实用程序/库,并将其发布NPM上面,以便在世界任何的地方可以重复使用它?...大多数开发者只是从一个项目复制代码另一个项目中使用它,因为它只是几行代码。但更好的方法是提取代码并将其放在一个公共的位置,以便你可以任何项目中访问它。...这将存储凭据,因此你不必为每次发布输入凭据。 现在去发布,运行(下面指令) npm publish 这会将你的包发布NPM注册表。...发布完成后(不到一分钟),你可以在链接https://www.npmjs.com/~{username}/{package-name}查看你的包。

    80110

    如何在gitlab上发布npm

    本地项目新增.npmrc 要从私有注册表(在我们的情况下是Gitlab)安装一个软件包,我们需要告诉npm哪里安装我们的软件包。...有过介绍,这里不在过多解释。 手动发布npm 其实这步和我们将一个包发布npm一样。都是通过npm publish进行发布。...这里就不在过多说明。 其实,在publishscript有一个很明显的命令: npm run semantic-release 这是我们这节的主角。它可以帮助我们实现在gitlab自动发布包。...让我们随意在一个新项目(demo_test)执行安装命令npm i @front789/demo 错误中看到在执行npm i @front789/demo命令时候,命令行提示在https://registry.npmjs.org...当我们看到401 Unauthorized的错误是不是感觉似曾相识。我们在利用CI/CD发布包时也遇到过。因为我们在新建项目的时候,就是选择了私有。

    51210
    领券