Web黑客工具箱之FireBug:洞悉复杂Web应用
2008-10-30 19:58
本文转自:http://netsecurity.51cto.com/art/200810/94891.htm
Firefox扩展Firebug是一个全功能的Web 应用程序调试器,可以协助Web黑客洞悉复杂的Web 应用程序的内部工作机制。它有两种版本:一种可以跨浏览器使用的组件Firebug Lite,另一种是专用于专用于火狐浏览器的扩展Firebug。本文将着重向读者介绍前者的用法。
一、简介
浏览器扩展Firebug提供了一个集成环境,我们能够在其中对感兴趣的Web 应用程序进行的全面的分析(参见图1)。它提供了许多功能,可以探索DOM结构、动态地修改HTML 代码、跟踪和调试JavaScript代码、监视网络请求和响应等等。
图1 浏览器扩展Firebug
二、利用Firebug控制台劫持函数
Firebug控制台可以用来计算表达式。作用如同命令行JavaScript解释器。在控制台中,我们不仅可以输入JavaScript表达式(例如,Alert (‘Message’);),而且还能接收错误消息。如下图所示:
图2 Firebug控制台
您也可以动态插入代码,举例来说,如果要测试一个Web 应用程序,该程序有一个从窗口对象导出的方法,称为performRequest。应用程序使用该方法从客户端发送请求到服务器。我们更感兴趣的可能是这个函数请求的信息,所以我们将在控制台中提供下列命令来劫持该方法:
window._oldPerformRequest = window.performRequest;
window.performRequest = function () { console.log(arguments);
window._oldPerformRequest.apply(window, arguments) }
上述代码实际上将用我们自己的函数替换原先的performRequest函数,我们的函数执行时将在控制台中列出所有参数。当函数调用结束时,我们将代码流程重定向到oldPerformRequest定义的原先的performRequest上,它将执行要求的操作。现在,我们已经明白如何在无需改写Web 应用程序的方法的情况下来劫持函数。
二、利用Firebug浏览和动态修改HTML元素
许多Web开发人员和设计者经常忽视HTML 源代码的可读性,尤其是用所见即所得的编辑器产生的页面。这会加剧我们审查其源代码的难度,这时,我们就需要使用其他一些工具来重新组织页面的各个部分。当然,我们可以使用DOM Inspector来探索这些结构欠佳的HTML 源代码,而Firebug也能达到同样的目的,下面是Firebug的HTML视图。
图3 Firebug的HTML视图
如图3所见,可以选择并展开当前视图中的每个HTML 元素。当鼠标停在某个元素上的时候,浏览器就会高亮显示对应元素。在右边的窗口,显示了关于式样、布局和DOM 特性的信息。DOM信息极为有用,当您想查询各种不同类型的属性可用时,几乎与DOM Inspector一样。此外,我们也可以用它探索应用程序运行机制。举例来说,AJAX应用开发人员经常会为图像、链接及其他类型的html 元素添加附加的属性,而这些属性和方法可能是应用程序逻辑的关键部分。
HTML视图还能用于动态地修改应用程序文档的结构。我们可以通过按下键盘上的删除键来删除所选定的元素,或者修改各个元素的属性,方法是在元素属性上双击并设置它的值。注意,HTML 结构的改变可能对页面更新事件不起作用。如果希望变化固定下来,可以使用GreaseMonkey脚本。
三、利用Firebug调试JavaScript脚本
Ajax 应用程序通常涉及JavaScript、XML和按需信息检索。它们的规模常常超过正常应用程序,并且运行起来很像是桌面应用程序。因为大量使用JavaScript,所以您将发现标准漏洞估计程序将无法覆盖所有可能的攻击方式。就像二进制程序测试一样,我们需要使用调试器来跟踪代码、分析程序结构和调查潜在的问题,Firebug为我们提供了所有这些功能,下图向我们展示了Firebug脚本调试器视图。
图4 Firebug脚本调试视图
在图4中我们可以看到一个断点,其位于第2行。 断点是些伪指令,用来通知JavaScript解释器当代码抵达这些断点时停止/中止该进程。一旦程序暂停,我们就可以查看存放在全局、局部变量中的当前数据,甚至更新它们。我们不仅可以通过它来了解程序正在干什么,并且还能取得对应用程序的完全控制。
在图4的右边,您可以看到监视和断点列表。断点列表包含我们在当前调试的代码中设置的全部断点。您可以迅速禁用和启用断点,但是却无需知道断点的精确位置。
监控列表提供了一个机制来监视DOM结构中的变化。举例来说,如果想知道某个的值在程序运行过程中的变化情况,只须简单创建一个相应的的监控条目即可。
四、利用Firebug操作DOM对象
DOM是存放Web 应用程序的内容的地方。DOM结构提供了动态编辑页面的所有必要功能,比如去除和插入html 元素、初始化计时器、创建和删除Cookie等等。DOM 是所有的Web 应用程序最为复杂的组件,所以对它的检查也是最难的。然而,Firebug 能够提供有用的DOM 视图,它的使用跟DOM Inspector一样。图5展示了Firebug的DOM 视图。
图 5 Firebug的DOM视图
如上图所示,DOM包含一个长长的元素表。我们可以查看当前可用的一些函数。通过使用Firebug的DOM 视图,我们可以检查当前打开的应用程序的各个部分。我们可以在一个树状结构中查看当前可用的所有属性和对象,并可以展开这些元素和对象来查看他们的子属性。
五、利用Firebug监视网络
Firebug最强大的的特性之一是网络流量监控功能。当我们想要监视应用程序内部发出的Web请求时,这个视图极为有用。当然,LiveHttpHeaders扩展也可用来监视网络,但是它会把全部请求显示在一个列表中,而Firebug却可以详细查看每个请求的每个字符。
图6 Firebug的网络视图
在网络视图的顶部,我们可以选择不同类型的网络活动,在上图中我们要查看所有请求。 然而,您可以只列出特定对象发出的请求。Firebug一个更为有趣的特性是该扩展将会记录全部网络活动,不管它是否打开。这个特性跟扩展LiveHttpHeaders有所不同,后者只有当它打开时才会记录网络事件。然而,与LiveHttpHeaders扩展不同的是,Firebug不能重放网络活动,但是将能更细致的观察网络流量。下图展示了Firebug正在检查请求和响应头以及发送的参数。
图7 利用Firebug查看网络请求
六、Firebug Lite简介
Firebug Lite是一个跨浏览器的组件,能够轻易地嵌入到需要测试的应用程序中它是专为开发人员而非安全研究人员设计的,并且没有Firefox扩展版本那样多的用途。然而,它在某些情况下是非常有帮助的,比如需要在Internet Explorer、Opera及其他不支持Mozilla平台的跨平台安装(XPI)型文件的浏览器中调试应用程序时。
使用firebug lite之前,必须在需要调试的应用程序内嵌入一些脚本标签。我们必须在使用FireBug的应用程序页面内放入下列脚本标签:
language="javascript" type="text/javascript"
src="/path/to/firebug/firebug.js">
要跟踪应用程序中的某个变量时,可以使用控制台对象。举例来说,如果我们想要跟踪下列循环中变量item的变化,可以使用下列代码:
function (var item in document)
console.log(item);
七、结束语
Firefox扩展Firebug是一个全功能的Web 应用程序调试器,可以协助Web黑客洞悉复杂的Web 应用程序的内部工作机制。本文详细介绍了在安全测试过程中的使用方法,如劫持函数、浏览和动态修改HTML元素、操作DOM、监视网络以及调试脚本等等。最后,我们还对Firebug Lite做了简要介绍。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
什么是Firebug
从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求。要写出漂亮的HTML代码;要编写精致的CSS样式表展示每个页面模块;要调试
javascript
给页面增加一些更活泼的要素;要使用Ajax给用户带来更好的体验。一个优秀的WEB开发人员需要顾及更多层面,才能交出一份同样优秀的作业。为帮助广大正处于Web2.0洪流中的开发人员,在这里为大家介绍一款轻巧灵活的辅助开发工具。
Firebug是Firefox下的一款开发类插件,现属于
Firefox
的五星级强力推荐插件之一。它集HTML查看和编辑、Javascript控制台、网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。Firebug如同一把精巧的瑞士军刀,从各个不同的角度剖析Web页面内部的细节层面,给Web开发者带来很大的便利。这是一款让人爱不释手的插件,如果你以前没有接触过它,也许在阅读本文之后,会有一试的欲望。笔者在撰写此文的时候,正逢Firebug发布1.0正式版,这不能不说是种巧合。
应用
Firebug插件虽然功能强大,但是它已经和Firefox浏览器无缝地结合在一起,使用简单直观。如果你担心它会占用太多的系统资源,也可以方便地启用/关闭这个插件,甚至针对特定的站点开启这个插件。
在安装好插件之后,先用Firefox浏览器打开需要测试的页面,然后点击右下方的绿色按钮或使用快捷键F12唤出Firebug插件,它会将当前页面分成上下两个框架,如图1所示。
图1:Firebug插件展开图示
从图1中看到,Firebug有6个主要的Tab按钮,下文将主要介绍介绍这几方面的功能。
Console
HTML
CSS
Script
Dom
Net
控制台
Html查看器
Css查看器
脚本条时期
Dom查看器
网络状况监视
Console 控制台
控制台能够显示当前页面中的javascript错误以及警告,并提示出错的文件和行号,方便调试,这些错误提示比起浏览器本身提供的错误提示更加详细且具有参考价值。而且在调试Ajax应用的时候也是特别有用,你能够在控制台里看到每一个XMLHttpRequests请求post出去的参数、URL,http头以及回馈的内容,原本似乎在幕后黑匣子里运作的程序被清清楚楚地展示在你面前。
象C shell或Python shell一样,你还能在控制台中查看变量内容,直接运行javascript语句,就算是大段的javascript程序也能够正确运行并拿到运行期的信息。
控制台还有个重要的作用就是查看脚本的log, 从前你也许习惯了使用alert来打印变量,但是Firebug给我们带来了一个新朋友 —— console.log, 最简单的打印日志的语法是这样的:
[url=#]PLAIN TEXT[/url]
CODE:
console.log("hello world")
如果你有一堆参数需要组合在一起输出,可以写成这样:
[url=#]PLAIN TEXT[/url]
CODE:
console.log(2,4,6,8,"foo",bar).
Firebug的日志输出有多种可选的格式以及语法,甚至可以定制彩色输出,比起单调的alert,显然更加方便,限于篇幅,这里不做详细说明,但是有志于提高debug效率的读者,可以到Firebug的官方站点(见附录)查看更详细的教程。
图2: 在控制台里调试javascript
查看和修改HTML
第一次看到Firebug强大的HTML代码查看器,就觉得它与众不同,相比于Firefox自带的HTML查看器,它的功能强大了许多。 HTML
首先你看到的是已经经过格式化的HTML代码,它有清晰的层次,你能够方便地分辨出每一个标签之间的从属并行关系,标签的折叠功能能够帮助你集中精力分析代码。源代码上方还标记出了DOM的层次,如图3所示,它清楚地列出了一个hml元素的parent、child以及root元素,配合Firebug自带的CSS查看器使用,会给div+css页面分析编写带来很大的好处。你还可以在HTML查看器中直接修改HTML源代码,并在浏览器中第一时间看到修改后的效果,光凭这一点就会让许多页面设计师死心塌地地成为Firebug的粉丝了。
有时候页面中的javascript会根据用户的动作如鼠标的onmouseover来动态改变一些HTML元素的样式表或背景色,HTML查看器会将页面上改变的内容也抓下来,并以黄色高亮标记,让网页的暗箱操作彻底成为历史。
利用Inspect检查功能,我们还可以用鼠标在页面中直接选择一些区块,查看相应的HTML源代码和CSS样式表,真正的做到所见即所得,如果你使用了外部编辑器修改了当前网页,可以点击Firebug的reload图片重新载入网页,它会继续跟踪你之前用Inspect选中的区块,方便调试。
图3::HTML查看器
CSS调试
Firebug的CSS调试器是专为网页设计师们量身定做的。
如今的网页设计言必称div+css,如果你是用table套出来的HTML页面,就得按这规矩重构一遍,否则显得你不够时髦!用div做出来的页面的确能精简HTML代码,HTML标签减肥的结果就是CSS样式表的编写成了页面制作的重头戏。Firebug的CSS查看器不仅自下向上列出每一个CSS样式表的从属继承关系,还列出了每一个样式在哪个样式文件中定义。你可以在这个查看器中直接添加、修改、删除一些CSS样式表属性,并在当前页面中直接看到修改后的结果。
一个典型的应用就是页面中的一个区块位置显得有些不太恰当,它需要挪动几个象素。这时候用CSS调试工具可以轻易编辑它的位置——你可以根据需要随意挪动象素。
如图4中正在修改一个区块的背景色。
提示:如果你正在学习CSS样式表的应用,但是总记不住常用的样式表有哪些值,可以尝试在CSS调试器中选中一个样式表属性,然后用上下方向键来改变它的值,它会把可能的值一个个遍历给你看。
图4: CSS查看器,能够直接修改样式表
可视化的CSS尺标
我们可以利用Firebug来查看页面中某一区块的CSS样式表,如果进一步展开右侧Layout tab的话,它会以标尺的形式将当前区块占用的面积清楚地标识出来,精确到象素,更让人惊讶的是,你能够在这个可视化的界面中直接修改各象素的值,页面上区块的位置就会随改动而变化。在页面中某些元素出现错位或者面积超出预料值时,该功能能够提供有效的帮助,你可以籍此分析offset、margin、padding、size之间的关系,从而找出解决问题的办法。
图5:Firebug中的CSS标尺
网络状况监视器
也许有一天,你的老板或者客户找到你,抱怨你制作的网页速度奇慢,你该如何应对?你或许会说这可能是网络问题,或者是电脑配置问题,或者是程序太慢,或者直说是他们的人品问题?不管怎么说,最后你可能被要求去解决这个有多种可能的问题。
网络状况监视器能帮你解决这个棘手问题。Firebug的网络监视器同样是功能强大的,它能将页面中的CSS、javascript以及网页中引用的图片载入所消耗的时间以矩状图呈现出来,也许在这里你能一把揪出拖慢了你的网页的元凶,进而对网页进行调优,最后老板满意客户欢喜,你的饭碗也因此而牢固。
网络监视器还有一些其它细节功能,比如预览图片,查看每一个外部文件甚至是xmlHttpRequests请求的http头等等。
图6:网络状况监视器
Javascript调试器
这是一个很不错的javascript脚本调试器,占用空间不大,但是单步调试、设置断点、变量查看窗口一个不少。正所谓麻雀虽小,五脏俱全。
如果你有一个网站已经建成,然而它的javascript有性能上的问题或者不是太完美,可以通过面板上的Profile来统计每段脚本运行的时间,查看到底是哪些语句执行时间过长,一步步排除问题。
图7:javascript调试器
DOM查看器
DOM(Document Object Model)里头包含了大量的Object以及函数、事件,在从前,你要想从中查到需要的内容,绝非易事,这好比你去了一个巨大的图书馆,想要找到几本名字不太确切的小书,众多的选择会让你无所适从。而使用Firebug的DOM查看器却能方便地浏览DOM的内部结构,帮助你快速定位DOM对象。双击一个DOM对象,就能够编辑它的变量或值,编辑的同时,你可能会发现它还有自动完成功能,当你输入document.get之后,按下tab键就能补齐为document.getElementById,非常方便。如果你认为补齐得不够理想,按下shift+tab又会恢复原状。用了Firebug的DOM查看器,你的javascript从此找到了驱使的对象,Web开发也许就成了一件乐事。
图8: Dom查看器
小结
Firebug插件提供了一整套web开发所必需的工具。从HTML的编写,到CSS样式表的美化调优,以及用javascript脚本开发,亦或是Ajax应用,Firebug插件都会成为你的得力助手。所谓工欲善其事,必先利其器。在Web2.0的时代,言必称Ajax,动辄就是用户体验提升,如果把Firebug工具用好,必能让你如虎添翼,将HTML、CSS、javascript整理得服服帖帖,从此成为web开发中的专家级人物。
附
Firebug的中文含义是萤火虫,作者是Joe Hewitt,官方网页 http://www.getfirebug.com
Firefox亦即火狐浏览器,是近年来撼动IE浏览器市场占有率的一支强大力量,要不是它的出现,我想有生之年说不定也看不到IE 7的发布了,官方网页 http://www.firefox.com