Chromium插件(Plugin)机制简要介绍和学习计划

本文深入探讨Chromium的Plugin机制,特别是PPAPI Plugin,包括NPAPI与PPAPI的区别、NaCl技术、安全沙箱以及Plugin的加载、创建和执行过程。通过实例分析,揭示Chromium如何通过严格的限制和验证确保Plugin的安全性。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

       在Chromium中,除了可以使用Extension增强浏览器功能,还可以使用Plugin。两者最大区别是前者用JS开发,后者用C/C++开发。这意味着Plugin以Native Code运行,在性能上要优于Extension,适合执行计算密集型工作。不过,以Native Code运行,使得Plugin在安全上面临更大挑战。本文接下来对Chromium的Plugin机制进行简要介绍和制定学习计划。

老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!

《Android系统源代码情景分析》一书正在进击的程序员网(http://0xcc0xcd.com)中连载,点击进入!

       Chromium最初支持两种类型的Plugin:NPAPI Plugin和PPAPI Plugin。NPAPI的全称是Netscape Plugin Application Programming Interface,PPAPI的全称是Pepper Plugin Application Programming Interface。从表面上看,两者的区别在于使用了不同的API规范。其中,NPAPI来自于Mozilla,而PPAPI来自于Google。但实际上,PPAPI与另外一种称为Native Client(NaCl)的技术是紧密联系在一起的。

       Native Client是一个由编译工具链(Toolchain)和运行时(Runtime)组成的集合。Toolchain包含在NaCl SDK中。此外,NaCl SDK还提供了PPAPI接口。也就是,通过NaCl SDK,我们可以开发PPAPI Plugin。这些PPAPI Plugin要使用NaCl SDK提供的Toolchain进行编译。Toolchain使用了修改过的GCC对PPAPI Plugin进行编译。这个修改过的GCC为PPAPI Plugin生成的每一条跳转指令的目标地址都是32位对齐的,并且PPAPI Plugin的第一条指令的地址也是32位对齐的。对齐的目的是出于安全考虑,防止恶意代码跳转到任意地址执行指令。同时,有些被认为是危险的指令是禁止使用的,例如ret指令。

       除此之外,这个修改过的GCC还会设置一个系统API白名单。在这个白名单里面的系统API,被认为是安全的,也就是对系统不会造成威胁和破坏,它们可以被PPAPI Plugin调用。不在这个白名单内的系统API,将会被禁止调用。这意味着,我们在开发PPAPI Plugin的时候,只可以使用由Chromium提供的PPAPI,以及位于白名单内的系统API。

       对PPAPI Plugin的CPU指令以及API调用进行限制,目的都是为了安全。这些安全理论基础可以参考Native Client: A Sandbox for Portable, Untrusted x86 Native CodeGoogle Native Client: Analysis Of A Secure Browser Plugin Sandbox这两个PDF文档,我们在这里就不展开来讲了。

       单单靠Toolchain对PPAPI Plugin的CPU指令以及API调用进行限制是不足够的,因为黑客可以对编译后的PPAPI Plugin进行修改。因此,就需要有一套Runtime,在PPAPI Plugin加载时进行验证。这套Runtime由一个NaCl PPAPI Plugin和一个Service Runtime组成,如图1所示:


图1 NaCl Architecture

       NaCl PPAPI Plugin是一个内置在Chromium中的PPAPI Plugin,它属于一个Trusted Plugin,运行在Render进程中。Chromium还内置了一个PPAPI Flash,它同样也是一个Trusted Plugin,运行在Render进程中。此外,负责解析网页的WebKit,以及运行网页中的JS的V8引擎,也是运行在Render进程中的。

       注意,内置的PPAPI Plugin不需要使用NaCl技术,因为它们是Trusted Code。为了区分使用了NaCl技术的PPAPI Plugin和内置的PPAPI Plugin,我们将前者称为NaCl Module。NaCl Module是Untrusted Code,它们以两种形式存在:Portable Executable(PEXE)和Native Executable(NEXE)。PEXE是跨平台的,编译一次,可以在所有平台运行。NEXE是平台相关的,只可以运行在指定的平台。实际上,PEXE在加载之前,会先被翻译成NEXE再加载和执行。

       在网页中,可以通过<embed>标签使用一个NaCl模块,如下所示:

<embed name="NaCl_module"  id="hello_world"  width=200 height=200  src
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值