CHROME扩展开发揭秘金山网络张志和CHROME扩展历史AaronBoodman/Greasemoney设计思想••最小权限(LeastPrivilege)•权限分割(PrivilegeSeparation)•强隔离(StrongIsolation)安全性FireFoxExtension安全性问题•跨站脚本Cross-SiteScripting–evaldocument.write()–evalInSandbox•替换NativeAPIs•JavaScriptCapabilityLeaks–每个网页可以使用XMLHttpRequest•内容混合(HTTP和HTTPS)CHROMEExtension•最小权限分级–执行任意代码–访问网站–扩展APIAPI分类权限分割•ContentScript–利用标准DOMAPI–给扩展进程发送JSON消息•ExtensionCore•NativeBinary–NPAPILibraryIsolatedMechanism•Origin–Runtheextensioncoreinauniqueorigindesignatedbyapublickey•ProcessIsolation–Cross–originJScapabilityleaks•IsolatedWorlds–ContentscriptaccessestheDOMwithits“own”JSobjectContentScript和页面JS的隔离CHROMEExtension架构Background页面CHROME.*API•大部分是异步API支持的API•alarms:设定定时器•bookmarks:书签相关操作•browserAction:浏览器工具栏上面的展现•browsingData清除浏览数据•contextMenu操作上下文菜单•Cookies操作Cookie•History操作历史•Proxy代理相关设置•Storage存储(大小受限)•Tabs操作标签页•topSites最近访问网站•webNavigationNavigate回调•webRequest截获网络请求可用的其他API•标准JavaScriptAPIs核心JavaScriptandDocumentObjectModel(DOM)APIs•XMLHttpRequestUseXMLHttpRequesttorequestdatafromoneormoreservers.Thepermissionsfieldofthemanifestspecifieswhichhoststheextensioncansendrequests•HTML5API–audio–applicationcache–Canvas–geolocation–localstorage–Notifications–Video–webdatabase•WebKitAPIs•V8APIs,suchasJSON•APIsinbundledlibrariesjQueryUIPage•Popuppage•Chrome.tabs.create()•Window.open()•OverridePage:Bookmarkmanager,History,NewTabContentScript实例分析ContentScript2:过滤规则匹配BackgroundPageSubscriptionFilterStorage规则下载规则保存OptionPage配置请求规则页面页面加载通知ABP深入剖析Manifest文件初始化,得到数据Background页面的消息处理回调中处理广告过滤Block广告元素过滤函数规则下载,保存猎豹浏览器对于扩展的支持跟随CHROME的优化•为了解决BackgroundPage长期占用内存•EventPage按需装载–加载时机•第一次安装•监听事件到达•ContentScript发送消息•其他页面调用chrome.runtime.getBackgroundPage()–生命周期管理扩展和原生的关系•对于重要功能浏览器原生支持–新标签页–广告过滤–书签同步猎豹原生广告过滤完美支持扩展•IE核支持扩展IERenderJS引擎扩展进程ContentScript谢谢!