中间件 (Middleware) 是一种连接软件组件和应用的计算机软件,它包括一切服务,一边运行在一台或多台机器上的软件通过网络进行交互,该技术所提供的互操作性推动了一致分布式体系架构的演进,该架构通常用于支持简化那些复杂的分布式程序,它包括Web服务器、事物监控器和消息队列软件。中间件是基础软件的一大类,属于可复用软件的范畴,顾名思义,中间件处于操作系统软件和用户的应用软件的中间。
Web编程语言,根据解释执行的位置可以分为前端语言和后端语言。Web前段语言是指在浏览器上解释执行的Web编程语言,包括HTML和JavaScript等。Web后端语言是指在Web服务器上解释执行的Web编程语言,包括JSP、PHP、ASP、ASP.Net等。
PHP是“PHP Hypertext Preprocessor”的缩写,它是一门用来使得服务器产生动态输出的语言,输出的结果根据每次浏览器请求页面响应的结果而不同。通常,PHP文件的扩展名为.php。当Web服务器在请求的文件中遇到这个扩展名时,他将自动地将该文件传递给PHP处理器。当然,Web服务器是可以惊醒高配置的,一些Web开发者选择把文件强制命名为.htm或者.html,但还交给PHP处理器进行解析,通常这样做的目的是为了隐藏开发者正在使用PHP语言这一事实。
为了触发PHP命令,需要一个新的标记,这个标记由 和
?>
组成,前者开始一段PHP代码,代码内容放置在两个标记中间,最后由后者结束标记,整个PHP代码结束。这个标记的使用方法很灵活,一些开发者把标记的开始部分放在文档的开始点,在整个文档结束处放置结束标记,直接由PHP命令输出HTML结果;但是,还有一些人只是在需要动态叫本事将最少的PHP片段放入标记之间,剩下的文档保留在标准的HTML中。
JavaScript是完全在网页浏览器上运行的客户端脚本,它的用途是为了实现以脚本的方式来访问HTML文档中的所有元素。换句话说,JavaScript提供了一种和用户动态交互的途径,结合CSS,JavaScript能够改变眼前动态网页的样式,而不是让服务器返回一个新的页面。要把JavaScript代码放在以开头和
结尾的HTML标记之间才能调用它;除了在HTML文档中直接编写JavaScript代码之外,还可以包含自己网站或因特网上的任何JavaScript代码文件,其语法为:
或从因特网上获取文件:
MySQL是一个可以通过强大和快速的类英语命令管理数据并支持大型数据库的开源数据库管理系统,它采用标准的SQL数据库语言形式,可以运行在到各系统上并支持多种语言。一个MySQL数据库包含一个或多个表,每个表又包含多条记录(行),在这些行中有多种包括数据本身的属性(列)。
B/S结构(Browser/Server)即浏览器和服务器结构,他是随着因特网技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面时通过www浏览器来实现的,极少部分是无逻辑在前端(浏览器)实现,但是主要食物逻辑在服务端实现,形成所谓的三层结构。
C/S结构(Client/Server)中,服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要用户安装专门的客户端软件。
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网服务器传输文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据的,它属于应用层的面向对象协议,适用于分布式超媒体信息系统。HTTP于1990年被踢出,经过几年的发展和使用得到不断的完善和扩展。B/S架构的系统使用协议为HTTP协议,浏览器作为HTTP客户端通过URL向HTTP服务器即Web服务器发送所有请求;Web服务器根据接收到的请求,向客户端发送响应消息。HTTP常用的端口号包括80、8080、3128、8081、9080等。
HTTP具备简单快捷、灵活、无连接、无状态等特点,并支持B/S和C/S模式。其中,HTTP的无状态特点是指,与FTP或者telnet不同,HTTP协议无法记忆客户端的当前状态,这种特性被称为HTTP的无状态性,因此,状态的记忆需要凭借响应(HTML)中的hidden参数。
URL全称Uniform Resource Location,即统一资源定位符,是互联网上用来表示某一处资源的地址,其基本结构格式如下所示:
[注]
需要区分URL和URI。
URL中描述了协议,该URL用于检索资源和资源名称。如果资源是Web类型资源,则URL在开头包含http / https。同样,如果资源是文件,则以ftp开头,如果资源是电子邮件地址,则以mailto开头。
URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符。通过使用位置,名称或两者来标识Internet上的资源;它允许统一识别资源。
URL主要用于链接网页,网页组件或网页上的程序,借助访问方法(http,ftp,mailto等协议)来检索位置资源;URI用于定义项目的标识,此处单词标识符表示无论使用的方法是什么(URL或URN),都要将一个资源与其他资源区分开来。另外,URL指定要使用的协议类型,而URI不涉及协议规范。
用户和Web服务器之间的基本通信会话通过用户浏览器发送HTTP和接收HTTP响应实现的,下图反映了完整的HTTP请求过程
在浏览器发送给Web服务器的请求消息中,请求消息的第一行(示例如下所示)被称作请求行,相当于浏览器下打给服务器的指令。请求行由请求方法 (GET)、URL (/31/31-001.PHP)和版本协议 (HTTP/1.1)组成,他们之间以空格相隔:
GET /31/31-001.PHP HTTP/1.1
请求方法除了GET(获取)以外,还有POST和HEAD等。GET和POST于HTML中form元素的method属性指定的值相同。
HTTP请求的第二行及以后的内容被称作请求头信息(Header),其格式为名称与值以冒号相隔。请求头信息,但其中只有HOST是必须的。HOST是表示接受信息的主机名(FQDN)和端口号(80时可以省略)。请求头部之后是请求数据,二者通过一个空行隔开。
GET方法使用的是URL后紧跟查询字符串的形式来传递参数的,但由于浏览器和服务器能够处理的URL长度有限,所以当传递的信息量很大时,使用POST方法哼安全;另外,敏感信息应该使用POST发送,这是因为POST有下列风险:
因此,传递请求中包含数据更新等请求时、发送敏感信息时以及发送信息量很多时,都应使用POST方法而不使用GET方法。
一般情况下,服务器接受并处理客户端发过来的请求后会返回一个HTTP的响应消息,HTTP响应也应由四个部分组成,即状态行,消息报头/响应头信息、空行和响应正文。状态行的内容是请求消息经过服务器处理以后的状态,其包括(示例如下所示)协议版本(HTTP/1.1)、状态码(200)和状态描述(OK)组成。
HTTP/1.1 200 OK
响应消息的第二行及以后的内容为响应消息,内容一直到出现空行(只含有换行符的行)为止,以下为典型的响应头信息:
常见的HTTP状态码和其含义如下表所示:
[注]
重定向是指通过各种方法将网络请求重新设定方向转到其他位置,如网页重定向、域名重定向、陆游的选择变化等。现实中重定向的原因可能是网站调整(如改变网页目录结构)、网页被移到新地址、网页扩展名改变。如果不做重定向,那么用户浏览器页面则可能出现404错误。
开放式Web应用程序安全项目 (OWASP, Open Web Application Security Project) 是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。OWASP每隔四年就会发布一版十大最严重的Web应用安全威胁,即OWASP Top 10,它被视为web应用安全领域的权威参考。美国联邦贸易委员会(FTC)强烈建议所有企业需遵循OWASP十大WEB弱点防护守则。
(13版本的A4和A7合并为17版本A5;13版本A8和A10因为威胁的范围较小因而在17版本中被去除)
注入类威胁的产生原因是Web应用程序没有将程序代码和用户提交的数据严格区分开来,将恶意用户提交的数据当做了一部分代码解析执行,注入类威胁轻则泄露各种敏感信息,严重的将直接导致整个网站服务器被控制。
信息泄露类漏洞主要是由于Web应用组件(Web服务器,Web中间件,Web应用程序)配置错误或者设计缺陷造成的,通过此类问题,恶意攻击者能够获取目标服务器的各种敏感信息,进而为下一步攻击埋下伏笔。
业务逻辑漏洞本质上属于业务设计缺陷,表现为设计者或开发者在思考过程中作出的业务流程存在明显或隐含的错误,恶意攻击者利用这些业务设计缺陷,通过篡改业务流程和数据,往往能达到设计人员‘意料之外’的效果