Chrome的无痕浏览实现初探

简介: 一. 功能定义 首先要从功能上明确无痕浏览的作用和目的。涉及的功能包括: Bookmark, History (Input, Browse, Download, Forms/Auto complete), SSL Certs,Cookie, Local Storage, WebSQL, Application Cache, HTTP Cache,Disk Cache,Web App/Plugin 以及所有这些可能会引起持久化及透露用户信息(如Gelocation, Notification)的功能项。

一. 功能定义

首先要从功能上明确无痕浏览的作用和目的。涉及的功能包括: Bookmark, History (Input, Browse, Download, Forms/Auto complete), SSL Certs,Cookie, Local Storage, WebSQL, Application Cache, HTTP Cache,Disk Cache,Web App/Plugin 以及所有这些可能会引起持久化及透露用户信息(如Gelocation, Notification)的功能项。

*还有剪贴板中从无痕浏览模式下复制出来的内容。


行为上主要区别正常模式与无痕模式的相互影响, 三个问题:

     1. 什么可以清除 

      2. 什么可以禁用

      3. 什么可以相互共享


其中包括三个场景:

     1. 从正常模式进无痕模式

     2. 从无痕模式退出到正常模式

     3. 再次进入无痕模式 (与之前无痕模式的关系)


以下是一份针对流行的浏览器进行的调查 (原文在这里, 时间大概在2011年)。 针对项目包括进入无痕模式前的信息是否会在无痕下使用(下表):


以及退出无痕模式后,是否可以在正常模式下使用。



在前一无痕模式下设置的项目,是否可以在下一次无痕模式下使用:



这是一份比较系统的梳理,很有指导意义。 


BTW, 这篇文章也做了进入无痕浏览模式的主要浏览内容的占比, 还是很有代表性的。

     



二. Chrome的实现方式

Chrome的做法则完全将无痕浏览与正常浏览区分开来,没有共享这些资料。我大致过了一下Chrome的代码,其核是通过Profile的机制来完成的,无痕浏览下对应off the record profile (OffTheRecordProfileImpl in off_the_record_profile_impl.cc 以及OffTheRecordProfileIOData in off_the_record_profile_io_data.cc)。 


每一个profile可以视为不同的帐号的session,彼此间从数据上隔离开来。很多类实现了ServiceIsCreatedWithProfile并且返回True, 用来表示在无痕模式下将共享profile。


比如在profile::GetSpecialStoragePolicy()指定一个存储策略,在其它需要的类(如StoragePartitionImpl)中必要的时机调用它进行处理。


下面是Google文档的描述:

 Profile should be a minimal reference, a sort of handle object that doesn't own the world.  There were separate versions of Profile for Normal, Incognito and Testing profiles.  In this world, the Profile was the center of all activity.

以下是Chrome无痕浏览模式涉及的Cookie和Storage的类图,其中CookieMonsterDOMStorageArea各有一个负责持久化的成员store_backing_ (directory_为空时,backing_不创建), 从OffTheRecordProfileIOData初始化开始,会指定不同的参数使得CookieMonsterDOMStorageArea没有持有一个可用的持久化对象,只能操作各自的map, 以此达到设计的目的。这样做的目的,可以有效区分内存操作和持久化的逻辑,方便上层的控制。



详细的代码还需要进一步学习,至少可以了解到关于无痕浏览这是一个需要系统加以组织实现的方式。

     

*参考:

  Profile Architecture

 http://www.cnblogs.com/kwliu/archive/2013/06/06/3116053.html



三. 安全问题

无痕模式面临的另一个问题是一些潜在的恶意软件的问题。比如下面这个链接就是作者展示进行无痕浏览时,可以从PageFile.sys和RAM中找到浏览记录:

http://www.magnetforensics.com/how-does-chromes-incognito-mode-affect-digital-forensics/


在上面提到的文章中,结尾处也提到了安全性的问题,可见这个问题的重要性。


基于以上对于无痕浏览的理解,下一步可以规划再深入理清问题,研究Firefox的实现方式,以方便评估改善计划。实现上未必需要以Chrome的profile方式,只要能够将用户数据有效的组织和分离就可以了。


转载请注明出处: http://blog.csdn.net/horkychen



目录
相关文章
|
Web App开发 监控 安全
浏览器原理 36 # 浏览上下文组:如何计算Chrome中渲染进程的个数?
浏览器原理 36 # 浏览上下文组:如何计算Chrome中渲染进程的个数?
221 0
浏览器原理 36 # 浏览上下文组:如何计算Chrome中渲染进程的个数?
|
Web App开发 JavaScript
Vue课程31-在chrome浏览中安装vue-devtools
Vue课程31-在chrome浏览中安装vue-devtools
168 0
Vue课程31-在chrome浏览中安装vue-devtools
|
Web App开发
PC - Chrome 浏览器如何开启无痕模式?
PC - Chrome 浏览器如何开启无痕模式?
903 0
PC - Chrome 浏览器如何开启无痕模式?
|
Web App开发
Chrome 浏览器降级后浏览网站不保留用户数据问题原因及解决方法
Chrome 浏览器降级后浏览网站不保留用户数据问题原因及解决方法
503 0
Chrome 浏览器降级后浏览网站不保留用户数据问题原因及解决方法
|
Web App开发
Chrome 插件:无痕浏览模式下加载插件、启用插件设置方法
Chrome 插件:无痕浏览模式下加载插件、启用插件设置方法
1274 0
Chrome 插件:无痕浏览模式下加载插件、启用插件设置方法
|
Web App开发 Python
Chrome 技术篇-chrome浏览本地文件目录方法,浏览器查看文件目录。
Chrome 技术篇-chrome浏览本地文件目录方法,浏览器查看文件目录。
1306 0
Chrome 技术篇-chrome浏览本地文件目录方法,浏览器查看文件目录。
|
Web App开发 前端开发
chrome,opera..通过file协议浏览html代码时,发送的ajax请求本地文件,会报跨域错误
XMLHttpRequest cannot loadfile:///E:/webs/extJS/ext-3.3.0/examples/csdn/combobox.txt?_dc=1414738973999.
1731 0
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
1606 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率