码迷,mamicode.com
首页 > 其他好文 > 详细

caja 原理 : 前端

时间:2015-12-08 00:04:38      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

    作为前端开放的基础安全保证,caja 是目前比较合适的运行机制,包括前端运行环境以及后端编译环境,这次先整体介绍下 caja 在前端是如何屏蔽外部模块代码对整体应用的影响 (注意:官方文档较少,以下为自己理解,难免偏颇).

组成部分

1. 整体运行环境:隔离模块与宿主环境,并提供外部应用与模块的沟通机制.

 

2. 提供 ecmascript5 以及 dom2 的全平台兼容实现,注入到运行环境中。

 

     es5 部分通过直接修改本地原生对象原型实现,运行时直接使用原生对象,这种做法值得推荐

 

      其中比较重要的是:模拟实现 es5 中的属性描述符 ,结合后端编译,用户的所有读写操作都会经过 caja 前端运行环境监测,是 caja 安全保证的核心机制.

 

     dom 兼容部分则并不是直接修改宿主 dom 原型 ,而是自行构造了一系列 javascript 实现的 dom 类,使用组合模式,将操作增强并委托到对应的原生节点,然后将这些 dom 类注入到模块运行环境。用户程序对 dom 节点的操作都要经过 caja 运行环境的转发,便于控制。

 

3. html/css parser ,包含了简易的 html/css parser,对用户的 html,css进行必要的过滤以及添加自定义规则,最常见的是

 

 1. 防止 id 冲突,经过过滤后,每个 id 都改写为全局唯一的标志.

 

 2. 拦截随意跳转,监控代码的可能跳出点( src , href ...).

 

 3. 代码模块化机制,后端将用户代码编译为模块化单元,前端通过模块化机制加载并初始化用户代码。实现代码广泛采用了 promise .

运行机制

caja 中的每个模块表示为一段 html,css,javascript 的结合体,外部应用嵌入多个模块,caja 保证每个模块的独立性与安全性:

 

1.不能访问平台的相关特性.(window.location,cookie )

2.不能污染全局。( 全局变量,原生对象,宿主对象 )

3.节点操作限于模块内部.

转自 { focus : web }

caja 原理 : 前端

标签:

原文地址:http://www.cnblogs.com/kailzhou/p/5027668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!