过时的 Javascript 库会给我的 Web 应用程序带来风险吗?

信息安全 javascript 图书馆
2021-08-23 08:19:50

我有一个小型 Web 应用程序,我刚刚意识到我的一些 JavaScript 库已经过时了。

一个例子:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/core-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-utf16.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/enc-base64.js"></script>

我发现了一个新版本:

https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/core.min.js

过时的 JavaScript 库会给我的应用带来安全风险吗?还有一件事,使图书馆保持最新的最佳方式是什么?

4个回答

使用任何过时的软件本质上是一种安全风险;您正在运行的版本和最新版本之间修补的任何缺陷都可以被利用。例如,可能有一个特定的有效负载可以提供给它以导致无限循环,从而可能导致拒绝服务 (DOS) 事件,或者可能有一个错误可以以某种方式破坏 JavaScript 沙箱并对系统造成严重破坏。

我没有看到 Internet 上提到任何关键的安全问题,但这并不意味着它们不存在或没有被修补。始终建议尽可能使用最新版本,但这也可能包括使用新版本测试您的代码,以确保在更新时它不会破坏功能(例如,主要版本通常与之前的主要版本不兼容)。

使您的库保持最新的最佳方式是使用工具链中的包,该工具链提供一键式升级。例如,如果您使用 将库复制到本地服务器npm install,则可以直接导入它们(如果您使用它们,cloudflare 将为您的站点提供保护)。从那里,更新你的库就像npm update从命令行终端一样容易。

强烈建议您使用 TDD(测试驱动开发)套件,例如Mocha,以确保您的脚本在库升级时不会中断,并且通常会减少您在开发期间破坏代码的机会。此外,请记住使用存储库(如 git 或 subversion),以便在 npm 更新导致内容中断时可以回滚更改。

这取决于过时的 JavaScript 库中的(已知)漏洞。通常较新的版本也会修复(次要)安全问题。

检查你的库的一个很好的列表是一个名为Retire.js的工具。

另请注意,使用 CloudFlare 之类的内容交付网络 (CDN) 本身风险可能很小。因为理论上它们可以更改页面中包含的 JavaScript 的内容。为了减轻这种风险,我建议检查子资源完整性(SRI)。

我说不,这就是为什么。库只运行浏览器允许它们运行的​​代码。他们不应该做坏事。如果一个库揭示了一个安全问题,你要么没有正确使用它(例如模板上的用户输入处理),要么它揭示了一个浏览器漏洞。无论如何,沙箱和策略应该可以防止恶意脚本。

我能想到的唯一例外是客户端加密,它应该被维护而不是轻率地进行。图书馆作者不是安全专家,这就是为什么让浏览器成为警察如此重要的原因。虽然起步不稳,但过去几年浏览器在这方面做得很好,尤其是现在 pdf 和 flash 等插件已经减少。

最后一个想法:我专门指的是基于客户端浏览器的 javascript 库;如果你有像 node.js 这样的服务器的过时库,是的,可能会发生坏事!

编辑:这包括您自己的外部服务器;CDN、合作伙伴网站、广告等。如果在没有服务器的情况下发生 Web 漏洞利用,那它就不是真正的漏洞利用。浏览器/插件/等偶尔会出现基础问题,但在它们之上运行的代码不承担纠正这些问题的责任:供应商会这样做。

这取决于。

如果新版本作为旧库中发现的任何安全问题的补丁发布,则使用它是有风险的。

但是,JavaScript 是一种客户端语言。因此,只有当 Ajax 请求功能存在缺陷时,它才会给您的服务器带来风险。

来自http源的JS 库可能会导致其他问题,但https不会产生任何其他问题。

另外需要注意的是,作为 Web 开发人员,在更新之前请仔细阅读迁移日志。因为如果不推荐使用任何功能并且您在页面中使用了该功能,它将无法正常工作。