@typescript/eslint-plugin 的漏洞?

Posted

技术标签:

【中文标题】@typescript/eslint-plugin 的漏洞?【英文标题】:Vulnerabilities of @typescript/eslint-plugin? 【发布时间】:2021-12-08 15:14:36 【问题描述】:

有两个包,TSLint,

https://github.com/palantir/tslint

它是克服者,typescript-eslint,

https://github.com/typescript-eslint/typescript-eslint

他们有一些相同的维护者。 typescript-eslint 指的是其文档中的旧版本。

Palantir 是一家公司,它的名字不仅有一种淡淡的味道,而且我不确定这是一个安全的包。他们的产品对一些人来说是有见地的,对另一些人来说是间谍软件。因此,尚不完全清楚,如果它是对公众的善意贡献,或者可能有某些东西,那应该被视为关键。

尤其是当我们必须关心应用中的个人数据时。 @typescript/eslint-plugin 不能从带有 typescript 的 Create-React-App 的构建环境中删除,因为它也是“.eslintrc”中提到的“解析器”。

如何平息烦恼?如何确定没有泄漏?或者我可以将它从 node_modules 文件夹中排除并能够从 create-react-app 中获取“构建”吗?

解析器的 AST 扫描还允许插入功能以捕获所有内容,流经功能。编写自己的规则很容易,可以在每个函数调用上部署一堆包装器,将所有信息发送到某个位置,并且只需要在每个文件中使用 eslint --fix 即可。

【问题讨论】:

【参考方案1】:

ESLint 不是漏洞向量,因为它只涉及源代码。这意味着为了让它破坏您的代码,您必须执行以下操作:

    安装受感染的 eslint 插件。 手动开启受损的 eslint 规则。 通过eslint --fix 运行受损的自动修复。 忽略对源代码的更改,并将受损代码交付到生产环境。

(1) 和 (2) 足以阻止它发生,或者如果发生了,那么有人会很快检测到危害并报告安全问题。 (3) 需要由工程师手动操作引起。 (4) 在合并你的代码之前,很容易被任何同行评审过程发现,因为再次; eslint 只对源代码进行操作。

create-react-app 也已正确配置,以确保 eslint 不会在您的构建代码上运行。 AFAIK - 它在进行生产构建时也不运行 ESLint。


现代 JS 开发(就像任何依赖第三方代码的语言开发一样)建立在信任链之上。您相信您安装的软件包及其依赖项是安全的。 CRA 已决定 eslint、typescript-eslint 等都是受信任的 - 因此它们将它们包含为依赖项。

如果您信任 CRA,那么您也必须信任它的依赖项。

如果您不信任 CRA 或其依赖项之一,则无需安装它,而是构建自己的内部解决方案。


tslint 是安全的,而且一直都是。如果 Plantir 是一些阴暗的公司并将恶意软件注入到他们的包中——有人会很快找到它并报告漏洞——破坏项目和公司的可信度。

typescript-eslint 与 palantir 或 tslint 没有关系。这些项目是完全独立的——它们有不同的维护者,并且 typescript-eslint 不属于任何公司。

typescript-eslint(如 tslint)也是完全开源的 - 如果您担心任何事情 - 您可以花时间自己验证它是否安全。

typescript-eslint(如 tslint)也作为未混淆、未压缩的 JS 发送到 NPM(因此发送到您的计算机)。您可以轻松地花时间验证您收到的代码是否与 OSS 存储库中的代码匹配并且是安全的。

【讨论】:

三点:(1)Joshua Goldberg 是两个项目的共同维护者(github.com/JoshuaKGoldberg/Goldblog/blob/…)(2)为什么typescript-eslint 依赖不能只作为dev-dependency?如果我从node_modules 中删除它,则构建过程将失败,因为它用于从 AST 中删除 typescript。 — 因此,它必须为所有使用 typescript 的生产版本运行,这无论如何都是 CRA 的默认设置。 (3) 谁读了 eslint-plugin-code?但是,是的,让我们相信,如果没有什么具体的。 Josh 也是 TypeScript 本身的贡献者。他为推动 TS 生态系统的状态做了很多工作。如果你研究他,你会很快了解到这一点,并且他是可以信任的。您的构建失败,因为 CRA 依赖于它。它可能是在它为您配置的 webpack 配置中导入的。所以如果你完全删除它,配置就不需要它,一切都会崩溃。同样 - 如果您愿意,您可以调查 CRA 以了解它如何使用该软件包,而不是假设它是恶意的。 如果你不知道 - 我是 typescript-eslint 的核心维护者,并且已经过去 3 年了。 TypeScript 项目认可该项目作为 TS 推荐的 linting 解决方案。他们还在他们的回购中使用它。所以如果你不信任这个项目,那么你就不能信任 TypeScript 或 NPM 上的任何东西。 嗨,这里是 Josh Goldberg,对布拉德所说的一切 +1。我想指出,我与 Palantir 没有任何关系。从来没有,也可能永远不会。

以上是关于@typescript/eslint-plugin 的漏洞?的主要内容,如果未能解决你的问题,请参考以下文章

@typescript-eslint/eslint-plugin 错误:'Route' 已定义但从未使用过(no-unused-vars)

Issues with peer dependencies found