npm 包 cajas 使用教程

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

前言

随着前端技术的发展,我们开发 web 应用时使用的 js 代码越来越复杂。同时,因为 js 代码是在浏览器客户端执行的,所以存在一定的安全隐患。为了解决这个问题,我们需要更多的安全措施来提高我们的线上应用安全性。

Caja 是一款谷歌开发的可信 HTML 和 Javascript 包检测工具,通过沙箱隔离和一些其它机制验证,并对 js 代码进行约束,从而达到保障 web 应用源码安全的目的。而 cajas.js 是 Caja 的前端实现,被封装成了 npm 包,可以轻松地引用与使用。本文将详细介绍 npm 包 cajas 的使用方法。

安装

在你的项目中首先安装 npm 包:

--- ------- -----

使用

Caja 提供两种 API:HTMLSanitizer 和 caja.但是 HTMLSanitizer 已经过时,所以我们推荐使用 caja API。在本文的讲解中,我们使用 caja API。

引入依赖

----- ---- - -----------------

约束方法

在使用 caja 的时候,我们需要通过定义两个约束规则:白名单和黑名单。

白名单可以放行一些特定的方法和属性,让这些方法和属性可以被执行和访问;黑名单则相反,对一些有安全隐患的方法和属性进行拦截和约束。这两个规则可以通过定义 Policy 来实现:

----- - ------ - - -----
----- ------ - --- --------
  ------------ ----- -- ---- -- -- --- ----------
  ---------- --------------- -- ----- ---- -----
  ----------------- --------------------- -- ----- ---- ---
  ------------ ------ -- ----- -- ---- -----------
  ---------- -- -- --- -- --- -----------
  --------- -- -- --- -- -- ---
  ------------- -------- -- --- -- -------- ------ -- ----- --
  ---------------- ------ ------ -------- -- --- -- -------- ---- ----------- ------------- -------
---

在这里,我们使用了默认的 tagPolicy 和 santitizerPolicy。tagPolicy 默认允许的标签包括:

---- ------- ---------- ---------- ------- ---------- -------- --------
---- ------ ------ ------ ------------- -----
---------- --------- ------- ------- ------ -----------
------- ----------- ----- ------ ---------- ------ ------ ----- -----
-----
----------- ------------- --------- ------- --------- -------
----- ----- ----- ----- ----- ----- --------- -----
---- ------ -------- ------
------ ---------
-------- --------- ----- -------
------- ------ ------- ------- ----------- --------
------ -----------
--------- ----- ----------- --------- ---------
---- -------- ------ -----------
----
----- ----- ----- ------ -------
---- ------- --------- ---------- --------- -------- --------- ------- --------- --------- -------- ------ ---------- ------
-------- -------- ----- ----------- ----------- -------- ----- -------- ------- -------- ----- -------- -----
---- -----
------ --------
-----

santitizerPolicy 默认不过滤任何 html,这里我们演示自定义 santitizerPolicy:

----- - ---------- - - -----
----- --- - --- ------------
  ---------- --------------- -- ----- ---------
  ------------ ----- -- ---- -- --- ---
  -------- --------- -------- -- -
    -- -------- --- ----- -- ----------- --- --- -
      -- ------- ------- --
      ------ ----------------------------------- -------------
    -
  --
---

这里我们重新定义了 safeTag 方法,对于空 alt 属性的 img 标签,将其转义为特殊的占位符。在之后的过程中再将其转义为安全图片输出。下面我们加上最核心的执行约束函数:

----- ------ - --- ---------------------------------
----- - -------------- - - --------------
----- -------------- - --- ---------------------- ------- ---------------
  ---------- -----
  ------------- -----
----
----- ------ - --- ---------------------------- -----

-------- --------- -
  ------ ------------------------------- --------
-

这里通过 iframe 和 CajaChrome 对资源进行沙箱隔离,再通过 CompileContext 设定约束条件,并使其允许变量和方法的访问和执行。最后通过 virtualMachine 的 compile_ 方法对代码进行约束编译,从而达到线上执行的目的。其中传入的 code 是待验证的 js 代码。

执行 Js 代码

我们定义了约束函数和执行函数后,接下来就是我们写 js 代码的时候,这些代码的执行步骤了。

举个例子,我们有如下 js 代码:

----- ---- - -
  -------- ------ -- -
    ------ - - --
  -
  ------------------ ---
--

这里我们定义了一个加法函数 add,这个函数会在控制台输出 3。我们使用 run() 函数执行这段代码:

----------

在控制台输出应该是:

-

完整的例子代码:

----- ---- - -----------------
----- - ------ - - -----
----- - ---------- - - -----

---
 - ---------
 --
----- ------ - --- --------
  ------------ ----- -- ---- -- -- --- ----------
  ---------- --------------- -- ----- ---- -----
  ----------------- --------------------- -- ----- ---- ---
  ------------ ------ -- ----- -- ---- -----------
  ---------- -- -- --- -- --- -----------
  --------- -- -- --- -- -- ---
  ------------- -------- -- --- -- -------- ------ -- ----- --
  ---------------- ------ ------ -------- -- --- -- -------- ---- ----------- ------------- -------
---

---
 - -- ----------
 --
----- ---------- - --- ------------
  ---------- --------------- -- ----- ---------
  ------------ ----- -- ---- -- --- ---
  -------- --------- -------- -- -
    -- -------- --- ----- -- ----------- --- --- -
      -- ------- ------- --
      ------ ----------------------------------- -------------
    -
  --
---
----- ------ - --- ---------------------------------
----- - -------------- - - --------------
----- -------------- - --- ---------------------- ------- ---------------
  ---------- -----
  ------------- -----
----
----- ------ - --- ---------------------------- -----

---
 - ----
 --
-------- --------- -
  ------ ------------------------------- --------
-

---
 - --
 --
----- ---- - -
  -------- ------ -- -
    ------ - - --
  -
  ------------------ ---
--

----------

以上这块代码我们放在一个 html 文件中,通过实现后端发送约束之后的 js 代码,我们可以很好的防止前端代码出现恶意自执行的情况。同时也能够保护用户的信息安全,值得深入了解和掌握。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60066c91ccdc64669dde5948


猜你喜欢

  • npm 包 cangjie-code 使用教程

    在前端开发中,输入法应用越来越多的成为了一个热门话题。那么,对于汉字输入法来说,是否有一种可以节省时间、提高输入效率的方法呢? 经过一番调查与试验,我们发现 cangjie-code 这个 npm 包...

    4 年前
  • npm 包 canela 使用教程

    在前端应用开发中,我们经常会使用各种 npm 包来实现某些功能,如图形可视化、动画效果、表单操作等。其中一个非常实用的 npm 包是 canela(https://npmjs.com/package/...

    4 年前
  • npm 包 candystore-canvas 使用教程

    简介 candystore-canvas 是一款基于 Canvas 的 JavaScript 库,它提供了一些简单易用的工具和方法,用于绘制和处理画布上的图形和动画。

    4 年前
  • npm 包 callifexists 使用教程

    随着前端技术发展的不断进步,使用 npm 包管理器已经成为前端开发的常规操作。而在 npm 包当中,有些包或许我们并不需要在每个项目中都调用,但是又希望在需要的时候可以直接调用,这时候可以使用 cal...

    4 年前
  • npm 包 callipyge 使用教程

    什么是 callipyge? Callipyge 是一个基于 JavaScript 的 npm 包,用于自动化生成 CSS3 动画。它使用类似 jQuery 的语法风格和链式调用,可以帮助前端开发者快...

    4 年前
  • npm 包 callisto 的使用教程

    如果你正在寻找一个简单易用、功能强大的前端库来处理日期和时间,那么 callisto 可能是你需要的。callisto 是一个基于 Moment.js 的前端库,它提供了许多方便实用的日期处理函数。

    4 年前
  • npm 包 calcapp-pankaj-2 使用教程

    介绍 calcapp-pankaj-2 是一个小巧的 JavaScript 库,用于实现四则运算。它可以用于任何需要计算的场景,如计算器、收银机、物理引擎等。该库已发布到 npm 社区,可以通过 np...

    4 年前
  • npm 包 callit 使用教程

    前言 在前端开发中,我们常常需要用到各种 npm 包来辅助我们的开发,其中一个常用的 npm 包就是 callit。callit 是一个能够模拟函数的调用并记录其执行情况的工具包。

    4 年前
  • npm 包 calcapp-arvind 使用教程

    引言 对于前端开发者来说,一个好的工具能够极大的提升开发效率,其中 npm 包无疑是优秀的工具之一。在前端业界有着众多热门的 npm 包,其中 calcapp-arvind 是一个非常优秀的计算器工具...

    4 年前
  • npm包canvas-js使用教程

    概述 canvas-js是一个基于canvas的JavaScript图形库,可以方便的绘制图形、图表和动画等。使用canvas-js,开发者可以轻松创建交互式和动态的图表和图形。

    4 年前
  • npm 包 canvas-image-uploader 使用教程

    在前端开发中,常常需要将图片上传到服务器并进行处理,例如裁剪、压缩等操作。而利用 canvas 技术能够实现这一目的。canvas-image-uploader 是一个基于 canvas 技术实现的图...

    4 年前
  • npm包canvas-label的使用教程

    前言 canvas-label是一款基于canvas的npm包,可以用于绘制长文本的标签。在前后端分离的时代,前端的视觉呈现越来越受到重视。canvas-label可以很好地满足一些复杂的视觉展示需求...

    4 年前
  • npm 包 canvas-linearlinechart 使用教程

    介绍 canvas-linearlinechart 是一个基于 canvas 的线性图表库,可用于前端页面中的数据可视化。它具有简单易用的接口,可用于绘制多条线性曲线并支持自定义样式。

    4 年前
  • npm 包 canvas-linechart 使用教程

    前端开发中,绘制折线图是常见需求。使用 npm 包 canvas-linechart 可以快速实现折线图的绘制和配置,本篇文章将介绍该 npm 包的使用方法和相关注意事项。

    4 年前
  • npm 包 canvas-lms.js 使用教程

    前言 在前端开发中,有时候需要使用 HTML5 Canvas 实现图形化的操作。在这种情况下,开发者可选用的方案有很多,而 canvas-lms.js 就是其中一种不错的解决方案。

    4 年前
  • npm 包 canvas-loader 使用教程

    Canvas-Loader 是一个轻量级的 JavaScript 库,用于创建自定义的加载器动画。它采用 HTML5 Canvas API 来绘制动画,因此只需要添加一个 Canvas 标签元素,就可...

    4 年前
  • npm 包 canvas-long-shadow 使用教程

    什么是 canvas-long-shadow Canvas 是 HTML5 中的一个新技术,让开发者可以通过 JavaScript 在浏览器中绘制图形。而 canvas-long-shadow 是一个...

    4 年前
  • npm 包 canvas-menu 使用教程

    前言 在前端开发中,绘制图形和实现交互是常见的需求之一。而使用 Canvas 技术可以帮助我们轻松地实现这些功能。本文将介绍一个 NPM 包——canvas-menu,它可以帮助我们轻松地实现自定义的...

    4 年前
  • npm 包 canvas-mock 使用教程

    前言 canvas-mock 是一个用于单元测试的 npm 包,它允许使用 canvas 的 API 在非浏览器环境中运行。这个包的作用是模拟一个 canvas 环境,在不需要浏览器渲染的情况下进行测...

    4 年前
  • npm 包 canvas-multiline-text 使用教程

    在前端开发中,有时需要生成多行文本的画布,此时可以使用 canvas-multiline-text 依赖包。本文将介绍如何使用此依赖包,包括安装、配置和部署等方面,并提供示例代码供参考。

    4 年前

相关推荐

    暂无文章