1.1.4 资源

一般来说,攻击者的最终目标是获得对Web应用资源的未授权访问。Web应用拥有哪些资源?

尽管Web应用可以有许多层次,但是大部分分为三层:表示层、逻辑层和数据层。表示层一般是超文本标识语言(HTML)页面,静态或者由脚本动态生成。这些页面一般不包含攻击者使用的信息(至少意图是如此;但本书还会介绍一些例外情形)。逻辑层也一样,但是Web应用开发人员经常在这一层犯错误,导致应用其他方面遭到侵害。在数据层的有诱人的数据,如客户数据、信用卡号码等。

这些层如何映射到URI?表示层一般由静态HTML文件或者主动生成HTML的脚本组成。例如:

http://server/file.html(as static HTML file)

http://server/script.php(a HyperText Preprocessor,or PHP,script)

http://server/script.asp(a Microsoft Active Server Pages,or ASP script)

http://server/script.aspx(a Microsoft ASP.NET script)

动态脚本可以作为逻辑层,接受输入参数和值。例如:

http://server/script.php?input1=foo&input2=bar

http://server/script.aspx?date=friday&time=1745

许多应用为这个目的使用独立的可执行文件,所以你可能看到下面这样的例子而不是脚本文件:

http://server/app?input1=foo&input2=bar

许多框架可以用于开发这样的第2层逻辑应用。最常见的包括Microsoft的Internet服务器应用编程结构(ISAPI)和公开的通用网关接口(CGI)规范。

不管实现哪种类型的第2层逻辑,几乎都要访问第3层的数据。因此,第3层一般是某种数据库,通常是SQL的变种。这为攻击者从应用操作和提取数据创造了单独的机会,因为SQL语法通常经过表示和逻辑层以不合适的方式暴露出来。我们将在第6章中关于输入注入攻击的部分中图解介绍这一过程。