第1章与众不同的Web1.
1本章内容本章罗列了一些和使用Web软件工作有关的内容.
对于一个这方面的新手而言,它提供了一些很有趣的背景知识.
无论你在Web开发方面是否有经验,也不管你是什么职位(项目经理、测试人员、开发人员或是其他的技术岗位),本章都能够让你很好地理解Web项目中的相关内容,并为阅读在后续章节中提到的Web攻击做好准备.
Web是与众不同的.
理解它的背景和细节能够让你的工作更有效率.
1.
2简介今天我们所知的计算机软件诞生于二战时期.
战争爆发的时候,人们非常需要计算的能力.
飞弹的弹道轨迹需要计算得更加精确,也需要算得更快.
我们也需要破译加密的电文,这样当我方舰队必须穿越危险的水域时,能够知道敌方舰队的准确位置.
这些重大的需求刺激了计算机技术的迅速发展.
接下来的几十年里计算机和软件的首次应用带来了令人难以置信的变化.
大学里开设了计算机科学的学位.
大型的商业机构和政府机关采用自动化设备来完成原本复杂的手工工作.
每年都会有很多新的自动化手段取代传统的手工工作方式,直到我们的世界变成了今天的样子:计算机和软件渗透了社会生活的方方面面.
事实上,如果不运行几千行代码,早晨我们甚至很难下床吃早餐.
在不断变革的推动下,计算机技术的快速发展即使在今天仍然没有丝毫减缓.
但有一项变革使得其他的一切都黯然失色.
这项革新在这个充满了变革的领域中独树一帜,它将改变地球上几乎所有计算机用户的生活.
这项革新比其他的任何技术都创造了更多的用户、商机以及成功的范例.
它就是WorldWideWeb.
Web改变了一切.
它改变了软件工程,并迫使我们重新评价软件测试的技术.
后面的章节会提到这些技术.
在本章中,我们先反思一下Web带来的这些变化,并为学习本书后面介绍的测试技术打下基础.
1.
3WorldWideWeb网络化的计算机已经不是什么新鲜事物了.
我们通过局域网(LAN)和广域网(WAN)连接计算机,这比Web的连接范围更广.
事实上,Web只是"客户-服务器"网络的一种特殊形式.
客户-服务器网络通过将复杂和耗时的计算交给被称为"服务器"的昂贵的大型计算机完成来有效利用计算资源.
服务器往往具有很大的存储容量和内存以及多线程、高速的处理器.
这些高速设备使其在完成高强度的计算处理时比一般计算机更快,并可以将结果利用一定的通信手段传递给称为"客户"的普通微型计算机.
在客户-服务器网络中,有三个重要的组成部分:服务器计算机一台或多台客户计算机客户与服务器的连接,也就是网络其基本构想如下:客户机需要数据或是网络资源(比如打印机),它通过网络连接服务器并请求获取数据或资源.
服务器完成计算请求并通过网络将数据或结果返回给客户(参见图1-1).
图1-1客户-服务器网络流程图显然,这个简单的交互过程中包含了很多内容.
在客户端,必须开发相应的软件来连接网络并收发请求及数据,而服务器端也是如此.
在网络层,需要有相关的协议来保证计算机的通信.
这种协议必须考虑到网络带宽的问题、数据传输的丢失、冲突、出错,以及某一台或其他计算机(或者资源)不可用的情况.
好在上述问题都已经不同程度地被解决了.
像传输控制协议(TCP)、用户数据报协议(UDP),以及它们所支持的协议(比如互联网协议(IP)、地址解析协议(ARP)和域名系统(DNS)等)都已经被实现,这使得客户和服务器端的开发者变得很轻松.
现在最大的问题是:这样强大的计算机网络应该用于何处考虑到网络最早的用户是科研人员,而他们的主要问题是对数据的访问.
大学里那些和工业界及政府存在合作关系的科学家需要找到并获取开展研究所需要的数据,并和他们的合作伙伴共享这些数据.
当我们这样做的时候,为什么不能公布我们所有的研究,使得任何人都能访问和使用呢难道不能扩展计算机网络的范围以包括世界上所有的计算机么在21世纪计算机网络早已遍布全球.
但是想像一下所有计算机都通过拨号或者点对点方式连接到网络的世界——一个建立在无连接或"孤立"的计算机基础之上的世界.
这样的缺陷激发了大量技术创新.
随着时间的流逝,广为传播的网络提供了比拨号更好的方式,连接到网络的计算机的数量大大增加了.
这种增长带动了应用程序的种类、信息量以及网络上可用资源的增长.
WorldWideWeb最初源自一种创造性的思想:新的网络层协议、新的服务软件实现网络连接并处理客户各种各样的需求.
新的客户软件浏览远程的服务器并搜索整个服务器来寻找所需信息.
于是WorldWideWeb诞生了.
这是一个全球性计算机网络,使用统一的语言和协议:超文本传输协议(HTTP)、超文本标记语言(HTML)、可扩展性标记语言(XML)和JavaScript——那些原有的协议已经使得网络广为传播,WorldWideWeb也是在此基础上建立并发展起来的.
但今天的Web已经远远超越了当初.
Web起初是为了取代Internet的主要功能:电子邮件和文件传输协议(FTP)——它们曾是通信和共享文件的主要途径.
当初,多个用户之间共享文件是通过一种叫做gopher的系统.
和今天的Web很类似,gopher允许用户通过Veronica(那时候的Google)搜索文档,而文档也可以链接在一起供浏览.
但到了20世纪90年代末,gopher几乎已经消失了.
gopher消失的原因是多方面的,但最重要的一点是密歇根大学(该技术的发明者)决定对它的使用收费,这使得人们都流向了免费的WorldWideWeb.
而且Web使用的HTML语言也比gopher更加强大和富有表现力.
Web的数据报文件以一种更加简单和直接的方式被共享(任何编码和解码过这种文件的人都会告诉你,它是献给人类的一份礼物!
).
因而用户可以在自己的计算机上浏览其他计算机存储的文件.
这和两台计算机距离的远近、系统平台的类型以及文件格式都没有关系.
其中的奥秘在于一个叫做Web服务器的服务程序,它允许远程客户端访问服务器硬盘上特定的部分.
Web彻底改变了我们共享文件和传递信息的方式.
现在我们需要一个浏览这些信息的办法.
坐在一个基于提示符的操作系统前容易让人觉得像是在漫游太空,而且随着用户数量的增长,手动上网的效率也显得太低了.
对客户端工具的需求变得越来越强烈,而这种需求也刺激了市场.
于是Web浏览器出现了.
它是客户计算机的终端工具,用于访问世界各地的服务器上越来越多的网页.
即使有了这些新的工具,Web的主要用户仍然是科学家、研究人员和那些非常需要数据共享的人.
和任何科学创新一样,Web应用层出不穷、Web的能力也快速膨胀.
这时候,商业界也开始关注它了.
至此我们已经拥有了一个可以通过计算机到达任何地方、联系任何人的工具——WorldWideWeb.
市场调查人员看到了它的潜力,销售人员也赞同这样的看法,不久高层主管也被说服了.
Web开始大众化.
现在,使用网络的不再仅仅是大学教授,每个人都有了自己的主页.
通信社在新闻广播的结尾都带上他们的主页(诸如http://and.
com之类的地址).
电视广告里也都包含URL地址,给用户提供关于公司和服务的详细信息.
但"详细信息"也是整个Web可以提供给我们的:更快、更容易地下载静态网页内容.
当然,Web技术所能提供的还远远不止是静态的Web页面!
除了在浏览器中显示的静态页面之外,Web服务器就不能提供其他的内容吗浏览器作为用户界面从服务器那里获得了什么呢如果一个住在爱荷华州的人访问一台阿姆斯特丹的服务器,他会得到些什么考虑下面的情形.
如果我们给旅行社打电话,旅行社会根据我们的需求向计算机输入数据,然后告诉我们所得的结果.
为什么我们不能直接向旅行社的计算机中输入数据呢为什么非要在客户和服务器之间额外增加一个人工操作上面的想法在技术上已经没有问题了,因为有了Web的交互方式.
如今的Web页面已经可以包括表单,它能够直接输入数据并传送到远程服务器的数据库中.
WorldWideWeb的真正潜力终于被发掘了出来.
我们不仅能使用Web传递信息,还可以和远程的用户或顾客直接进行交互.
各大公司开始争相在Web上发布信息、提供交流平台,以获取更多的利润.
Amazon、eBay等网站成为了这个领域的先锋.
他们用购物车和人性化的导购方式构建了一个电子商务平台,使我们的网上购物感觉更好.
从仅仅是学术界通过传统网络交流学术成果开始,走到今天取得了辉煌成就,互联网经历了漫长的发展过程.
1.
4Web世界的价值Internet的繁荣给世界带来了重大的改变.
".
com"成为了家喻户晓的词汇,甚至被一些电视广告用作噱头.
这种大量公司投身于Web的现象在华尔街被称为".
com爆炸".
各大公司纷纷开设了自己的Web网站.
HTML开发人员发现他们比大多数C++程序员的收入更高,而且Web网页正如同雨后春笋一般地出现.
这些网页大多数是仅仅包含了一些信息的静态页面,但有的网站已经打破了这种常规,变得更加具有交互性.
突然之间,我们已经可以通过网络购物了.
网络开始挑战杂志社、商场、零售中心、寻呼台,甚至是音像制品这些传统产业.
电话公司及时察觉到了公众的变化,开始大量投资,把现有的电话网改造成为基于网络的通信方式.
到了20世纪90年代末,已经几乎没有人不知道Web,而今天已经几乎没有人没在Web上购买过商品了.
Web领域的这些崭新的应用在软件和网络世界中开拓出了一片新天地.
面向Web的应用程序和传统的客户-服务器模式的应用程序是不一样的,其中包含了很多新的计算机技术,急于求成只会导致错误的产生.
1.
5Web和客户机-服务器WorldWideWeb是"客户机-服务器"模式的一种特殊形态.
"客户机-服务器"模式指的是由一个或多个集中的服务器向大量的客户机提供数据、资源、程序等.
传统意义上,这个模型包含了一个性能强劲的中央服务器,它们连接了很多远程的哑终端,这些哑终端并不进行实际的运算,只是提供了和服务器的接口.
可以把哑终端想像成连接到远程服务器的键盘和显示器.
很多UNIX网络都是由连接到瘦客户机的服务器组成的.
多数应用都在服务器端执行,客户端完成本地数据的存储和小型的计算任务.
服务器则负责大多数的复杂运算.
Windows系统的网络则恰好相反.
胖客户机进行基本的办公应用和浏览,而独立的服务器则用来提供网络服务(Web服务器、DNS等),以及海量的存储.
Web则是"客户机-服务器"模式的一种特殊形态,采用胖客户机,在诸如HTTP、HTML、XML以及SOAP之类协议上运行.
此外,Web还加入了对"不信赖"用户的验证.
与此相反,传统的网络只存在于公司的内部,由防火墙保护起来;而Web则在任何时候都可以被任何人访问.
在传统的"客户机-服务器"网络中,究竟哪些任务由客户机执行,哪些又由服务器来完成,这是泾谓分明的.
此外,客户机和服务器都仅仅存在于某个公司的内部.
但是在WorldWideWeb中却完全不是这样.
因为WorldWideWeb中的前两个W就代表了全世界.
在Web中,客户机是不在服务器的管辖范围之内的.
与LAN不同的是,Web中不存在需要保护的边界.
所有的客户机都被假想为"不能信赖"的;客户机需要提交附加的要求,指明如何在客户机和服务器之间分配计算.
LAN可以被设计为性能最大化的.
客户机可以完成的运算越多,中央服务器的运行就越快.
这可能就是胖客户机取代了瘦客户机的一个原因吧.
运算负担被分担得越平均,全网的速度就越快.
但是Web的确是一个奇怪的东西(参见框注"对立的目标").
本质上,它是由不可信赖的客户机组成的,任何一个客户机都可能成为敌人.
这就是说,任何由客户机提交的输入都需要进行仔细的检查,并且在服务器端要尽可能地采取各种安全措施.
对立的目标在软件开发过程中,有很多互相对立的目标,但是没有什么比安全更加重要.
在这些对立的需求中,最关键的就是安全性和可靠性.
提高可靠性就需要开发人员编写更多的代码,但是更多的代码就意味着出现更多bug的可能.
由于错误处理代码在测试中经常无法被执行(在实验条件下很难出现),代码中隐藏bug的可能性就更大了.
出于安全性考虑,需要仔细检查错误代码.
另一个重要的矛盾在于性能.
交给客户机执行的代码越多,服务器的运行速度就越快.
但是客户机执行的代码越多,就意味着更多的安全隐患.
因为用户对其上运行的代码有存取权限,正如我们将在第3章中看到的"攻击客户机".
除了安全性之外,可用性也是需要仔细考虑的.
可用性指的是向用户提供信息,保证用户可以方便地使用系统.
便于使用很大程度上也意味着便于攻击,尤其是当错误提示消息向黒客提供了有用的信息时.
在这本书中,我们将不断地描述这些互相对立的目标,并且对测试人员提供一些建议.
Web特定的环境不再是传统的软件开发人员所进行的网络编程.
我们编写了第一个Web应用,就像是LAN应用一样:尽可能地使客户机完成计算,从而加快服务器的速度,同时信任客户机所提交的各种数据.
结果就是:黒客、瘫痪、蠕虫、病毒.
还有混乱中的WorldWideWeb.
造成以上这些结果的原因是复杂和多样的.
其中的一些如下.
我们低估了Web服务器应有的目标.
Web站点正在全球迅速膨胀,黒客们都在密切注视着.
在由多个防火墙保护下的半信任的环境中,通常都有一些性能强劲的计算机.
有什么机器能比功能强大、带宽充裕的Web服务器更好呢考虑到Web服务器通常都很繁忙,这就使得网络攻击可以隐藏在大量的数据流中.
Web服务器通常都包含了大量令黒客们垂涎的敏感的用户数据.
Web服务器是缺少防护措施的、容易受到攻击的目标.
黒客们怎么会对此不感兴趣呢我们至今仍然在此问题上同黒客们做斗争,因为Web服务器是黒客们的主要攻击对象.
我们在Web的发展过程中前进得过于迅速,忘记了我们在以往的软件工程开发中吸取的教训.
Web的新奇使得Web开发人员可以快速上手,无论他从前是否有过软件编写的经历.
初学者也通常会被HTML语言的简洁易用而吸引,却忘记了传统的编程语言,比如C.
因此,Web上的很多应用都没有经过传统的服务器和应用程序所必需完成的细致检查和完整处理的流程.
在Web发展的初期,我们就已经有了很多工程实践的经验.
Web的开发周期很短,这就意味着相应的检查、测试、质量保证等环节所用的时间很少.
Web的开发是基于组件的,也就是说,开发者根据需求,定制各个组件,并且将他们组合起来,完成最终的应用构建.
组件化的开发方式意味着可以不关心具体的底层实现,来完成Web应用的开发.
我们可以尽可能多地实现所需的功能,这是多么令人激动的一件事!
我们忘记了Web是与众不同的.
在很多基础而又重要的方面,Web都与传统的客户机-服务器网络有很大的不同.
首先,用户都是匿名的,几乎所有的东西都可以被欺骗或伪造.
这给管理带来了很大的困难.
其次,Web是无状态的,所以当需要存储任何来自某个Web站点的资料时,都需要马上先将其存放到其他的地方.
因此,就需要建立一种人工的机制,完成对状态的管理.
这就是为什么类似cookie和隐藏域被广泛采用的原因.
Web本身并不包含任何安全控制.
任何敏感的数据都需要Web应用来管理,由客户机或者服务器对其进行处理.
Web的迅速膨胀使得我们对这些问题变得迟钝.
结果就是大多数的Web应用成了网络攻击的受害者.
我们不得不开始正视Web,真正将其理解为特殊的网络,实现对Web的控制.
这就是我们编写此书的原因.
Web的确是一类特殊的软件,需要有相应的新的开发及测试技术.
1.
6Web应用的一个粗略模型Web用户和Web服务器之间的通信主要有以下三个组成部分:包含具体的Web内容的服务器主机.
请求服务的客户机主机.
连接二者的网络.
1.
6.
1Web服务器从Web服务器进行测试与测试服务器应用程序是类似的.
在本套书籍的前两部(HowtobreakSoftware和HowtobreakSoftwareSecurity)中已经讨论了这个话题.
站在网络和客户端的角度上所看到的对Web服务器应用的测试才是本书的焦点所在.
1.
6.
2Web客户机Web客户机是你的顾客所面对的,同时也被你的敌人使用.
最大的问题就是如何构建一个Web应用,既能够满足顾客的需求,又让敌人对此无从下手.
从Web客户端进行测试需要考虑很多特殊的问题:恶意的用户可以篡改客户机上的数据.
千万不要忘记Web客户机是完全处于用户的控制下的.
不论我们如何保护这些数据,各种敏感的信息、执行细节等都是可见的.
此外,我们还可以绕过客户机上的所有认证代码.
结论:在没有得到服务器端对数据的双重认证时,不要在客户端执行重要的运算和验证.
来自Web客户机的全部数据流都需要被视为不可信赖的,并且对其进行验证.
多数的客户端交互都发生在Web浏览器中,但这并不能保证其安全性.
谁都不能肯定在离开浏览器后用户不会使用客户端对数据进行篡改(在客户端的浏览器和网络API之间).
结论:来自客户机的所有数据都需要被仔细验证.
用户对客户端的所有代码都有访问权限.
恶意用户可以查看和修改所有的客户端代码及数据(HTML、Java、Flash等).
以往的应用程序在用户看来都是十六进制的可执行代码,但是现在却不同了.
代码中无法隐藏任何秘密,这些代码都很容易受到攻击.
客户机可以发现一些服务器运行的细节.
服务器端返回的错误消息中通常包含了一些提示性的信息.
你可以通过这些推断出目录的结构和文件的存放地,还可以从标准错误信息中获知数据库的版本.
如果你说自己无法得到服务器端的配置信息,那就是在自欺欺人了.
安全是需要仔细考虑和设计的,并不能假设用户不了解这些.
他们什么都懂.
1.
6.
3网络连接了客户机和服务器的网络其实是非常混乱的.
采用明文传输的Web数据流会被截取或者篡改.
加密并不能实现彻底的防护,只能防止数据被篡改或者被人在传输过程中暗中监听.
拒绝服务攻击是另一种常见的网络攻击,但是本书并不涉及这一点.
不过我们会大致谈到一些.
要吸取的教训其实非常简单:不要信任任何客户机,不要信任任何网络,重要的操作都要放在服务器端执行.
脑中要时刻记着这些原则.
我们来看看常见的对Web应用进行的攻击.
1.
7结论Web是与众不同的.
它有特殊的协议,语言以及特定的软件系统.
这些特有的子系统又导致了对新的测试方法的需求.
在以后的章节中,将会详细介绍这些技术.
这些技术将会为我们带来更多经过了彻底测试的Web站点和Web应用,它们不再会受到篡改、破坏以及攻击.
HostYun是一家成立于2008年的VPS主机品牌,原主机分享组织(hostshare.cn),商家以提供低端廉价VPS产品而广为人知,是小成本投入学习练手首选,主要提供基于XEN和KVM架构VPS主机,数据中心包括中国香港、日本、德国、韩国和美国的多个地区,大部分机房为国内直连或者CN2等优质线路。本月商家全场9折优惠码仍然有效,以KVM架构产品为例,优惠后韩国VPS月付13.5元起,日本东京...
ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...
hypervmart怎么样?hypervmart是一家成立了很多年的英国主机商家,上一次分享他家还是在2年前,商家销售虚拟主机、独立服务器和VPS,VPS采用Hyper-V虚拟架构,这一点从他家的域名上也可以看出来。目前商家针对VPS有一个75折的优惠,而且VPS显示的地区为加拿大,但是商家提供的测速地址为荷兰和英国,他家的优势就是给到G口不限流量,硬盘为NVMe固态硬盘,这个配置用来跑跑数据非常...