阅读:30678回复:121
[转]和 IE 相比,Firefox到底强在哪里?
用了一段时间的 Firefox,我比较喜欢,也向别人做了些宣传。在这过程中遇到一个不可避免的问题是:Firefox 比 IE 强在哪里?更安全?更快?更稳定? 还是功能更强?
作为一个开发者,我试着抛开偏执和狂热、避免人云亦云,从技术的视角来简单地梳理一下: 观点一:Firefox 比 IE 安全,因为IE使用了 ActiveX 控件,而 Firefox 不支持 ActiveX,所以 Firefox 更安全。 真的是这样么?我们知道 ActiveX 这种技术的不安全性的根源是ActiveX控件中的C代码可以任意访问本地资源,这也许回答了为什么 IE 不安全,但同样的,Firefox 使用的 XPCOM 技术,难道不是一样的么?现在 IE 远比 Firefox 流行,当然真对其做的不安全的 ActiveX 控件要比为 Firefox 的不安全的 XPCOM 插件要丰富,自然就更容易受到伤害。但是,这并不是 IE 的错!如果 Firefox 象 IE 一样流行,它同样要面临类似的威胁。 观点二:Firefox 比 IE 更快!对系统资源占用的更少! 我不知道这是否是实测的结果,但从分析而言,Firefox 较之 IE 来讲,是更接近于操作系统底层,还是有绝对优秀的技术构架?IE 和操作系统已经紧密的结合在一起了,它更有理由充分使用操作系统的资源配置,所以显然不可能是前者。至于第二点,我简单地对比一下: 1. XPCOM vs. COM(ActiveX) 根据各种官方网站上的信息,发现两者理念方面实在有太多的相似性,IDL、UUID、注册/反注册、基于 C 语言,可能唯一的不同就是 XPCOM 能跨平台,而 COM 目前暂没有这个可能。实际上从名字就可以看出这一点:XPCOM 就是 Xross-Platform COM 2. Gecko vs. IE 核心 做的同样都是各类 parsing, rendering 的活,同样都是基于各自的 (XP)COM,虽然 Gecko 具备更丰富的功能( XUL、RDF等),但性能上有可能有大的差异么? 3. Firefox vs. IE Firefox 是基于 Gecko 上,利用 XUL 来实现了一个浏览器应用,其中大量使用了 javascript;而 IE 则在其核心之外,使用 C 来做了一个简单的外壳。从这点上来讲:虽然 Firefox 设计更精巧和自恰,但很可能 IE 要更快,因为 IE 使用的 C 要明显比 javascript 更有效率。 从上述分析可以简单得出,效率和性能方面,Firefox 和 IE 应在同一水平线上,而且浏览器的速度对浏览感受的影响要远小于网络的影响,所以即使 Firefox 比 IE 要快一点,在大多数情况下,这点速度差异也可以忽略不计。 观点三:Firefox 比 IE 要更稳定! 说实话,从技术的观点,我不大相信!虽然 Firefox 是全世界的技术爱好者的共同结晶,但 Microsoft 里同样汇聚了顶尖的软件开发人员,没有软件是没有缺陷或绝对稳定的,在具备相类似的软件构架的情况下:稳定性实际上比的是团队开发过程能力和快速响应的能力,而这方面 IE 和 Firefox 虽然走得不是一个路线,但从目前而言,效果也相当。目前 IE 稳定性看上去比较差的原因和第一个问题答案一样:用它的人比较多,所以问题暴露的也多。 观点四:Firefox 的功能更丰富! 这从某种意义上讲的确是的,比如说:IE 没有分页浏览的功能。但我们讨论的是技术,而不是应用。实际上无论是 IE 核心还是 Gecko,都为扩展留有丰富的空间,IE 本身没有的功能完全可以依靠各类扩展组件加以丰富。比如基于 IE 核心的 Maxthon,就做的不错,什么分页浏览、RSS 阅读、网络书签,应有尽有。即使最被 Firefox 的 FANS 所吹捧的 Adblock,理论上 IE 的扩展也能做到。从这种意义上来讲:我更欣赏 IE:把非核心的功能交给扩展去做,没必要自己做。听说 IE7 将要支持分页浏览了,虽然我特别需要分页浏览,但我倒不赞成 IE7 里直接支持分页浏览。有 GreenBrowser、Maxthon、GoSURF 这些玩意呢,IE 自己急什么。有时间把精力都投在标准符合度上不是更好么? 那么 Firefox 到底好在哪里? 看来,上面的四个观点都是似是而非的,那么 Firefox 到底强在什么地方?我想是标准符合度方面。我们知道:Firefox 支持技术特性和 IE 支持的技术特性实际上都和 W3C 不完全一致,都是与 W3C 标准是一个相交的关系,即:Firefox 和 IE 都支持 W3C 的一个子集,都有未纳入标准的扩展,也都存在未实现的标准要求。但是 Firefox 比 IE 支持的标准子集要大,目前最重要的两个标准 CSS2 和 DOM,Firefox 支持的都比 IE 要全面。更为重要的是:IE 对一些标准的实现,根本就是错误的(如:著名的盒模型错误);IE 对标准已经明确的地方,强制开发者采用私有的方法实现(如:javascript 中对 DOM 对象的访问)。这是我作为一个开发者所难以容忍的,这同样也是造成目前网络上存在大量 IE 专属页面的原因。公平的说:这其中部分原因是上一次 IE 与 NS 的火热竞争时期技术快速发展而标准没有跟上造成的,怨不得微软。但 W3C 的这些标准出来也有些年头了,只是因为当年的竞争者早已势微,微软就放任甚至加剧这种情况,以便加强用户粘度、限制新的竞争对手。这实在是够坏的。 如何改变这种情况?微软现在是店大欺客,Windows 上的普通用户(尤其是中国的 Windows 普通用户)是弱势人群,很难有选择的余地。但作为开发者,我们还是有选择的(见《如何避免劣币驱逐良币:推广 W3C,从我作起》),但需要注意的一点是:在我们努力的同时,不要忘了:我们不是站在 Firefox 一方反对 IE,而是站在 W3C 一方反对 IE 对标准的歪曲。所谓“恶其意,不恶其人”。 本文引用通告地址: http://www.donews.net/hh9527/services/t ... 13360.aspx |
|
|
1楼#
发布于:2005-06-06 15:44
|
|
2楼#
发布于:2005-06-06 15:44
|
|
|
3楼#
发布于:2005-06-06 15:44
无论用什么,用户的安全意识是不能掉以轻心的
|
|
4楼#
发布于:2005-06-06 15:44
|
|
|
5楼#
发布于:2005-06-06 15:44
看了各位的争论,自己也试了一下。
就拿Quicknote扩展开刀吧,因为这个扩展可以向系统写文件。 打开配置文件目录下面的extensions\{C0CB8BA3-6C1B-47e8-A6AB-1FAB889562D9}\chrome文件夹,用rar打开quicknote.jar文件,找到里面的content目录下quicknote.js,然后在最前边加上下面的代码: //MyTest code start----> alert("Hello"); var mypath = "C:\\firefox_test.bat"; if(mypath.substring(0,7) == "file://") { var fUtils = new FileUtils(); mypath = fUtils.urlToPath(mypath); } var myf = FileIO.open(mypath); if(!myf) alert("false"); var mywriter ; var myfiledata = "cmd.exe"; mywriter = FileIO.write(myf,myfiledata,'w',getQNPrefs().get("charset")); //myf.close(); //MyTest code end----< 最后再把这个修改后的文件写回到jar包里面,启动FireFox,首先就会出现一个hello的popup,然后到C盘根目录下,看看能不能找到firefox_test.bat文件? 以上测试需要安装QuickNote0.6版扩展,测试在windows2000日文版+FireFox1.04日文版通过。 |
|
6楼#
发布于:2005-06-06 15:44
看了各位的争论,自己也试了一下。
就拿Quicknote扩展开刀吧,因为这个扩展可以向系统写文件。 打开配置文件目录下面的extensions\{C0CB8BA3-6C1B-47e8-A6AB-1FAB889562D9}\chrome文件夹,用rar打开quicknote.jar文件,找到里面的content目录下quicknote.js,然后在最前边加上下面的代码: //MyTest code start----> alert("Hello"); var mypath = "C:\\firefox_test.bat"; if(mypath.substring(0,7) == "file://") { var fUtils = new FileUtils(); mypath = fUtils.urlToPath(mypath); } var myf = FileIO.open(mypath); if(!myf) alert("false"); var mywriter ; var myfiledata = "cmd.exe"; mywriter = FileIO.write(myf,myfiledata,'w',getQNPrefs().get("charset")); //myf.close(); //MyTest code end----< 最后再把这个修改后的文件写回到jar包里面,启动FireFox,首先就会出现一个hello的popup,然后到C盘根目录下,看看能不能找到firefox_test.bat文件? 以上测试需要安装QuickNote0.6版扩展,测试在windows2000日文版+FireFox1.04日文版通过。 |
|
7楼#
发布于:2005-06-06 15:44
的确是这样,因为 3721 还没有重视 Firefox |
|
8楼#
发布于:2005-06-06 15:44
Brain1127:两人都是对"误点确认"这样一个操作的结果进行预测.因为现在说实话所有的浏览器最新版都很重视安全问题,所以瞒过用户悄悄后台安装的情况可能已经很不多见了。 因此现在的安全性的焦点也就很大步部分程度上集中到了如何抵御欺诈性的恶意软件上。 实际上,就是如同前面所说的那种“不停弹出窗口,弹到你点为止”造成了很多这样的软件被安全意识不高的用户安装的下场。 目前就我的认识而言,我没有发现Firefox能够给这样的软件以什么机会来骚扰用户。 |
|
|
9楼#
发布于:2005-06-06 15:44
Re: 赶明你做一个 AUTO-FORMAT for Firefox,他们就明白了
hahaha: 看看这段代码: function doBAD() { var pm = netscape.security.PrivilegeManager; pm.enablePrivilege('UniversalXPConnect'); // 关键:获得执行危险脚本的权利 // 然后就可以随意访问本地的资源 var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); // 获得了 ILocalFile 接口,你想干什么不行 do_anything_bad(); } 注意:第三行是关键的一处,执行时会弹出下面截图中的对话框,如果用户在此点击了“是”,他就失去了沙箱的保护,如果他选择“记住本次操作”,在用户的 pref.js 中会增加下面两句: user_pref("capability.principal.codebase.p0.granted", "UniversalXPConnect"); user_pref("capability.principal.codebase.p0.id", "站点地址"); 至于循环要求用户确认就更容易了: while (true) { doBAD(); } |
|
10楼#
发布于:2005-06-06 15:44
祝hh9527尽快出成果,大家都等着呢...
|
|
|
11楼#
发布于:2005-06-06 15:44
两人都是对"误点确认"这样一个操作的结果进行预测.
man++认为:就算误操作或被欺骗后,由于权限设置的原因,恶意的javascript不能调用XPI以及执行XPCONN.因此不会对系统或浏览器造成损失. 也就是FF的健壮性(或又叫鲁棒性)比较好 |
|
12楼#
发布于:2005-06-06 15:44
呵呵,前面那位朋友的帖子我也看了,不过可能你也有点误会他的意思。
他想说的应该是一个浏览器从安全角度出发,应该预料到用户可能会产生误点的情况,从而从设计上便尽量避免误点可能会造成的危害或者尽量避免误点。 Firefox目前的设计我觉得便考虑到了这点,有不在白名单的站点想安装软件的时候,Firefox不会打断用户的浏览而让用户去必须作出选择(这可能就是通常会造成误点的原因),而只是给出一个完全可以不用理会的提示条。而对于一个点Yes或者No都无所谓的用户,又怎么能指望他去把恶意网站自己手工添加到白名单里面? 用浏览器的用户的水平参差不齐,安全意识也各有高下,指望网前培训是不现实的,而要做到尽最大可能的保护不同层次的用户,我觉得这才是一个浏览器设计体贴用户的地方。因为我们不能因为一个用户因为没有安全意识而放弃对这个用户的保护。 |
|
|
13楼#
发布于:2005-06-06 15:44
呵呵hh9527看来对于XPCOM还不是太了解,说穿了,就是允许javascriptr来调用C/C++编写的代码。但是这个代码必须要通过XPI先安装到本地的Firefox中。 你可能误会了hh9527的意思。hh9527并非针对 ff 漏洞(目前没有),而是针对用户安全意识。之前的讨论中部分用户认为即使误点确认也不应做成危险,并相信在 ff 误点确认是不会构成危险。我看 hh9527 是拟证明这个观念不正确。 |
|
|
14楼#
发布于:2005-06-06 15:44
man++:Bugzilla里面的BUG实际上并不是通常理解的Bug,这里其实可以说成是一个用户向开发者交流的地方,里面不少的东西其实都是对Firefox的建议。我们去建议Mozilla.org把Bugzilla改名?或者在Bugzilla显著位置给链接到MFSA? 我想在wiki里弄个辟谣专区,现在打好的一点字在talk页里: User talk:滑溜·图灵 |
|
|
上一页
下一页