背景
Deno 是 Ryan Dahl(Node.js 的创始人)推出的一种基于 V8 引擎的 JavaScript 与 TypeScript 运行时环境,其设计目标是提供更加安全、更加现代化的运行环境,同时也有更好的开发体验。相比 Node.js,Deno 带来了:
- 原生支持 TypeScript
- 安全性更高的模块系统
- 零配置文件监控和代码格式化
- 更好的标准库和工具支持等
因此,兴趣日益增长的 Deno 社区中,如何安全地使用 npm 模块已成为人们关注的一个问题。事实上,Deno 使用的是类似浏览器环境的模块系统,而浏览器中我们已经知道了如何避免 XSS、CSRF 等攻击,这些经验可以帮助我们解决 Deno 中使用 npm 模块的安全问题。
本文将详细介绍如何安全地在 Deno 中使用 npm 模块,我们会涉及到主要的安全问题、如何使用安全的技巧以及最后推荐一些优秀的 npm 模块供大家使用。
安全问题
Deno 的模块引入机制与 Node.js 不同,它并没有提供类似 Node.js 中的 require() 函数,而是通过 ES6 的 import 语句来实现模块引入,例如:
import { assert } from "https://deno.land/std/testing/asserts.ts";
但在 Deno 中使用 npm 模块存在以下安全问题:
1. 大量模块攻击
由于 npm 的开源性和生态的庞大,很难完全保证每个模块的质量和安全性。如果引入了未知的模块,且该模块有恶意代码,极有可能会带来方方面面的安全风险。
2. 模块篡改攻击
如果攻击者成功攻击了 npm 的服务器或者中间节点,就有机会对公共的 npm 模块进行篡改。这意味着在对应版本的模块上的任何运行,都会执行攻击者篡改的代码。
3. 依赖关系攻击
一个 npm 模块很可能会依赖另一个 npm 模块,这就形成了依赖关系链。如果某个被依赖的模块出现了安全问题,那么所有依赖它的模块都面临被攻击的风险。
安全使用技巧
1. 使用确定的版本
为了解决模块篡改的攻击,我们需要使用确定的版本。如果不确定模块版本,就会面临模块篡改的风险。在 Deno 中,可以在 import 语句中指定模块版本,例如:
import { assert } from "https://deno.land/std/testing/asserts@0.1.0.ts";
2. 使用信任的源
当前 Deno 官方并没有提供 npm 模块的包管理工具,但 Deno 支持从任意源中获取模块。因此当我们引入模块时,要确保源的可信度,尽可能选取一些相对可信的源,例如官方的 Deno 库、官方的 GitHub 组织等。
3. 将模块缓存到本地
为了避免大量模块攻击,可以将模块缓存到本地,这样可以减少对第三方的依赖。在 Deno 中,可以使用 --cached-only 来指定只使用缓存中的模块,例如:
deno run --cached-only start_server.ts
4. 安装本地的 npm 模块
为了进一步增强安全性,我们可以将依赖的 npm 模块安装到本地,并从本地引入。这样不仅可以避免大量模块攻击和模块篡改攻击,还可以方便做离线开发。
示例代码
-- -------------------- ---- ------- -- -- --- ------ ----------------- ------ - ------------ - ---- ----------------------------------------- -- -- --- ------ ------------------ ------ - ------ - ---- ------------------------------------------------ -- -- ---- -------- ------------------------- -- ------ ---- ---- ------------------------------------ -- -- ------- -------- ------------------------ -- ------ ------- ---- ---------------------------------- -- ------------- ---------------- ---
推荐模块
使用安全的 npm 模块非常重要,以下是一些优秀的、安全性高的 npm 模块:
- CryptoJS:一个加密算法的库
- Lodash:一个 JavaScript 工具库,提供了很多常用的函数
- Axios:一个基于 Promise 的 HTTP 请求库,可以用在浏览器和 Node.js 中
- Mocha:一个 JavaScript 测试框架,常用于 Node.js 和浏览器端
总结
上文介绍了如何安全地在 Deno 中使用 npm 模块,包括安全问题和安全使用技巧,并给出了示例代码和推荐模块。在开发过程中,我们应该关注模块的安全性,使用确定的版本,并确保源的可信度,同时可以将模块缓存到本地或者安装本地的 npm 模块。通过这些技巧,我们可以让我们的 Deno 应用程序变得更加安全,更加可靠。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ec0d11f6b2d6eab3658f79