作为前端开放的基础安全保证,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 }

转载于:https://www.cnblogs.com/kailzhou/p/5027668.html

caja 原理 : 前端相关推荐

  1. html是如何实现独占一行原理,前端知识(Html)汇总1

    一. 了解前端 1. 什么是前端 前端即网站前台部分,运行在PC端,移动端等浏览器上展现给用户浏览的网页.随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏 ...

  2. 单页面应用的前端路由原理是什么?

    前置知识 在了解单页面应用的前端路由原理之前,我们先了解下什么事单页面应用,什么是多页面应用,他们之间的区别又是什么? 什么是单页面应用? 单页面应用指的是第一次进入页面的时候会请求一个html文件, ...

  3. 前端路由工作原理与使用

    单页应用和多页应用 单页面应用:所有功能在一个页面上实现 一个.html 文件 前端路由 组件化开发 网易云音乐 小米移动端 多页应用:与单页应用相对应的,不同的功能通过不同的页面来实现 单页面 - ...

  4. 大前端的技术原理和变迁史

    本文适合前端新手入门,阅读人群最好是前端新手或者后台开发人员,因为我不敢保证对前端老司机有太多收获. 通过阅读本文,你将会大致了解前端这些年发生的事情,以及一些前端当前主流技术的简单原理介绍.所有涉及 ...

  5. 你知道前端单页面路由是怎么实现的吗?

    首先要学习一下history对象,history对象保存着用户的上网记录,从浏览器窗口打开的那一刻算起.出于安全的考虑,开发人员无法得知用户浏览过的URL.不过,借由用户访问过的页面列表,同样可以在不 ...

  6. 高性能JavaScript模板引擎原理解析

    来源:http://cdc.tencent.com/?p=5723 随着 web 发展,前端应用变得越来越复杂,基于后端的 javascript(Node.js) 也开始崭露头角,此时 javascr ...

  7. 从输入url开始,完善前端体系架构

    原文链接: https://segmentfault.com/a/1190000013662126 从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系! javascript 前端 23 ...

  8. layui 如何动态加载局部页面_从输入URL到页面加载的过程?如何由一道题完善自己的前端知识体系!

    前言 见解有限,如有描述不当之处,请帮忙指出,如有错误,会及时修正. 为什么要梳理这篇文章? 最近恰好被问到这方面的问题,尝试整理后发现,这道题的覆盖面可以非常广,很适合作为一道承载知识体系的题目. ...

  9. 一篇文章带你吃透VUE响应式原理

    本篇响应式原理介绍比较长,全文大概1w+字.虽然内容繁杂,但阅读过后,绝对会让你对vue的响应式有更加深刻的理解. 分块阅读,效果更佳.(建议读者有一定vue使用经验和基础再食用) 首先上图,下面这张 ...

最新文章

  1. 自用零散博文-route_state.ts
  2. 287. Find the Duplicate Number
  3. ASP.NET十分有用的页面间传值方法(转)
  4. Nginx——debug的使用
  5. BZOJ1562: [NOI2009]变换序列(二分图 匈牙利)
  6. window 如何查看tomcat 实时日志_如何处理生产环境Tomcat的catalina.out日志?
  7. hikvision v2.3控件网页demo_网页禁止复制粘贴怎么解决?教你五招轻松搞定
  8. 【CSS】利用宽高比例的媒体查询
  9. 关于Python在Linux、Mac和Windows上的安装方法总结
  10. Java删除文件和文件夹的方式
  11. 微信 html5商城,微信公众号H5商城源码
  12. 玩转5G之--网络布线2 详细解说
  13. Unity 使用Socket 简单实现通讯
  14. 三阶魔方快速还原法还原方法
  15. 专业测试-自评抑郁量表SDS_悟sphenic_新浪博客
  16. 用计算机写欧拉恒等式,震惊!计算器里竟然藏着这样一个秘密!
  17. c++win32项目 如何显示后再删除一个绘图_如何运用Excel,R等软件结合PPT做出你想要的矢量图...
  18. 几种常用网页文本编辑器总结
  19. 包装类-自动装箱和自动拆箱
  20. 《DKN: Deep Knowledge-Aware Network for News Recommendation》知识图谱与推荐系统结合之DKN

热门文章

  1. SqlHelper模板
  2. 高效的组合数计算方法
  3. jquery实现饼图统计图表
  4. 操作系统03进程管理Process_Scheduling
  5. Spring Cloud 学习 (五) Zuul
  6. Powershell-获取DHCP地址租用信息
  7. 12-1 12 防盗链 访问控制 php解析 代理
  8. 研究笔记:iOS中使用WebViewProxy拦截URL请求
  9. [转]打造自己的LINQ Provider(上):Expression Tree揭秘
  10. Cisco asa 5520 oid