黑客攻防技术宝典Web实战篇第2版—第3章 Web应用程序技术

3.1 HTTP

3.1.1 HTTP请求

1、所有HTTP消息(请求与响应)中都包含一个或几个单行显示的消息头,然后是一个空白行,最后是消息主体(可选)。

2、每个HTTP请求的第一行由三部分组成

①说明HTTP方法的动词,例如 get post

②所请求的URL

③使用HTTP的版本

3、其他要点

①Referer消息头表示发出请求的原始URL。

②User-Agent消息头提供与浏览器或其他生成请求的客户端软件有关的消息。由于历史原因都包含Mozilla前缀。

③Host消息头用于指定出现在被访问的完整URL中的主机名称。

④Cookie消息头用于提交服务器向客户端发布的其他参数。

3.1.2 HTTP响应

1、每个HTTP响应头第一行由三部分组成

①使用的HTTP版本

②请求结果的数字状态码

③响应状态词语

2、其他要点

①Server消息头中包含一个旗标,指明所使用的Web服务器软件。

②Set-Cookie消息头向浏览器发送另一个cookie,它将在随后向服务器发送的请求中由Cookie消息头返回。

③Pragma消息头指示浏览器不要将响应保存在缓存中。

④Expires消息头指示响应内容已经过期,不应保存在缓存中。

⑤Content-Type消息头,表示这个消息主体包含一个HTML文档。

⑥Content-Length消息头规定消息主体的字节长度。

3.1.3 HTTP方法

1、主要讲述GET和POST的区别联系:

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行URL编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

2、其他方法

3.1.4 URL

1、URL统一资源定位符

2、URI统一资源标识符,仅用于正式规范中或者嘚瑟装13用。

3.1.5 REST

1、表述性状态转移(REST)是分布式系统的一种体系架构,在此,请求和响应包含系统资源当前状态的表述。万维网包含HTTP协议和URL格式使用的核心技术,均属于此架构风格。

3.1.6 HTTP消息头

1、常用消息头

①Connection:告诉通信另一段,在HTTP传输后是否关闭TCP连接。

②Content-Encoding:消息主体中的编码形式。

③Content-Length:消息主体字节长度。

④Content-Type:消息主题内容类型。HTML文档内容类型为text/html。

⑤Transfer-Encoding:为方便HTTP传输对消息主体使用的任何编码。

2、请求消息头

①Accept:告诉服务器客户端愿意接受哪些内容,如图像、文档格式等。

②Accept-Encoding:告诉服务器客户端愿意接受哪些内容编码。

③Authorization:为一种内置HTTP身份验证向服务器提交证书。

④Cookie:向服务器提交他以前发部分cookie。

⑤Host:指定出现在所请求的完整URL中的主机名称。

⑥If-Modified-Since:说明服务器最后一次收到请求的资源的时间。如果自那以后资源没有发生变化,服务器就会发出一个带状态码304(简单的表达就是:服务端已经执行了GET,但文件未变化)的响应,指示客户端使用资源的缓存副本。

⑦If-None-Match:指定一个实体标签(说明消息主体内容的标识符)。

⑧Origin:用在跨域Ajax请求中,指示提出请求的域。

⑨Referer:指示提出当前请求的原始URL。

⑩User-Agent:提供与浏览器或生成请求的其他客户端软件有关的消息。

3、响应消息头

①Access-Control-Allow-Origin:指示可否通过跨域Ajax请求获取资源。

②Cache-Control:向浏览器传送缓存命令。

③ETag:指定一个实体标签。

④Expires:指示消息主体内容的有效时间。

⑤Location:在重定向响应中说明重定向的目标。

⑥Pragma:向浏览器传送缓存指令。

⑦Server:提供所使用的Web服务器软件的相关信息。

⑧Set-Cookie:向浏览器发布cookie,浏览器会在随后的请求中将其返回给服务器。

⑨WWW-Authenticate:用于在带401状态码的响应中,提供与服务器所支持的身份验证类型有关的信息。

⑩X-Frame-Options:浏览器框架是否及如何加载当前响应。

3.1.7 cookie

1、cookie是服务器与客户端沟通的数据载体,无需采取任何特殊措施,随后的没也给请求都会继续重定向服务器提交cookie。

2、键值对构成,可使用几个Set-Cookie发布多个cookie,或者同一个Cookie消息头中用分号分割不同cookie。

3、设置Cookie的参数

 

3.1.8 状态码

1、状态码分类

 

3.1.9 HTTPS

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

注:如今的SSL实际已经由TLS(传输层安全)代替,但后者通常还是使用SSL这个名称。

3.1.10 HTTP代理

1、HTTP代理服务器是一个协调客户浏览器与目标Web服务器之间访问的服务器。将所有请求提交到代理服务器,代理服务器再将请求转交给Web服务器,并将响应返回给浏览器。

大多数代理服务器还有缓存、验证、访问控制等服务。

2、使用代理服务器,HTTP工作机制会出现两方面的差异

①当浏览器向代理服务器发布HTTP请求时,它会将完整的URL插入请求中,代理服务器将提取主机名称和端口,根据这些信息将请求指向正确的目标Web服务器。

②当使用HTTPS时,浏览器无法和代理服务器进行SSL握手,因为这样会破坏安全隧道,易遭拦截攻击。

3.1.11 HTTP身份验证

1、HTTP有自己的用户身份验证机制:

①Basic:在请求头中随每条消息以Base64编码字符串的形式发送用户证书。

②NTLM:质询-响应式机制,使用某个Windows NTLM协议版本。

③Digest:质询-响应式机制,随同用户证书一起使用一个随机值MD5校验和。

3.2 Web功能

3.2.1 服务器端功能

1、根据用户请求,服务器执行脚本或其他代码生成动态资源返回。

2、用户传递多个参数请求,HTTP请求使用3种主要方式向应用程序传送参数

①通过URL查询字符串。

②通过REST(https://blog.csdn.net/weichi7549/article/details/96563383)风格的URL的文件路径。

③通过HTTPcookie。

④通过在请求实体中使用POST方法。

3、常见Web应用平台开发语言

①Java:遵循J2EE标准,较安全。

③PHP:简单易入门,但漏洞不少。

④Ruby On Rails:优势,较快创建成熟的数据驱动应用程序。

⑤SQL:基于SQL的数据库作为Web后端数据仓库。

⑥XML:将文档划分为内容和标记,方便获取,易扩展。

⑦Web服务:使用简单对象访问协议(SOAP)来交换数据。SOAP使用HTTP协议来传送消息,XML格式表示数据。

3.2.2 客户端功能

1、HTML

2、超链接

3、表单

4、CSS

5、JavaScript

6、VBScript:可用于替代只有IE才支持的JS。

7、文本对象模型(DOM):可通过其API查询和操作的HTML文档的抽象表示形式。

8、Ajax:异步交换数据。

9、JSON:可对任意数据序列化的简单数据交换格式。

10、同源策略:防止不同来源内容相互干扰。同一网站收到的内容可以读改该站点收到的其他内容,但不得访问其他站点的内容。

11、HTML5:①引入可用于传送跨站点脚本及实施其他攻击的新标签、属性、API。②对XMLHttpRequest修改,实现双向跨域交互,可能导致跨域攻击。③引入心的客户端数据存储机制,可能导致用户隐私问题及新型攻击。

12、Web2.0:更注重交互性。

13、浏览器扩展技术

3.2.3 状态与会话

1、更方便浏览器客户端交互。例如购物。

3.3 编码方案

3.3.1 URL编码

1、URL编码主要用于对扩展ASCII字符集中的任何有问题的字符进行编码,使其可通过HTTP安全传输。任何URL编码以%开头,后跟两个十六进制ASCII代码。

2、常见URL编码字符

 

3.3.2 Unicode编码

1、Unicode是一种为支持全世界所使用的各种编写系统而设计的字符编码标准,采用各种编码方案,其中一些可用于表示Web应用程序中的不常见字符。

2、16位Unicode编码的字符以%u开头,后是这个字符的十六进制Unicode码点。

3、UTF-8是一种长度可变的编码标准,一个或几个字节表示每个字符,%开头,后跟十六进制表示每个字节。

3.3.3 HTML编码

1、HTML编码是一种用于表示问题字符已将其安全并入HTML文档的方案。有许多字符有特殊含义,被用于定义文档结构而非内容,为了安全使用,进行HTML编码。

2、常见HTML编码定义HTML实体表示特殊的字面量字符:

3、任何字符都可以使用他的十进制ASCII码进行HTML编码:

 

3.3.4 Base64编码

1、常用于电子邮件附件编码,并通过SMTP传输。还可用于基本HTTP验证机制中对用户证书进行编码。

3.3.5 十六进制编码

1、许多应用程序在传送二进制数据时直接使用十六进制编码。

3.3.6 远程和序列化框架

1、用此框架开发者可以一定程度上忽略Web应用程序的分布式本质,而与开发传统桌面应用程序类似的方式编写代码。

3.4 下一步

1、开始研究渗透测试员如何向Web应用程序发动攻击。

3.5 问题

1、OPTIONS方法有什么作用?

答:OPTIONS方法要求服务器报告可用于特定资源的HTTP方法。

 

2、If-Modified-Since和If-None-Match消息头的作用是什么?它们为何引起攻击者的兴趣?

答:If-Modified-Since消息头用于指定浏览器最后一次收到被请求的资源的时间。If-None-Match消息头用于指定实体标签,在最后一次收到被请求的资源时,服务器与被请求的资源一起发布该标签。

在上述两种情况下,这些消息头用于支持浏览器中的内容缓存,服务器通过它们指示浏览器使用资源的缓存副本,而非资源的完整内容(如果这样做没有必要)。

在攻击应用程序时,浏览器可能已经缓存了攻击者感兴趣的资源(如JavaScript文件)副本。如果删除这两个消息头,就可以覆写浏览器的缓存信息,确保服务器以攻击者希望查看的新的资源副本做出响应。

 

3、当服务器设置cookie时,secure标签有什么意义?

答:secure标签用于向浏览器发出以下指示:只应通过HTTPS连接、绝不能通过未加密的HTTP连接重新提交cookie。

 

4、常用状态码301与302有什么不同?

答:301状态码告诉浏览器被请求的资源已永久移动到其他位置。在当前浏览器会话期间,如果浏览器需要访问最初请求的资源,它将使用在301响应中指定的位置。

302状态码告诉浏览器被请求的资源已临时移动到其他位置。下次浏览器需要访问最初请求的资源时,它将从最初请求的位置请求此资源。

 

5、使用SSL时,浏览器如何与Web代理实现互操作?

答:浏览器向代理发送一个CONNECT请求,将目标主机名和端口号指定为此请求中的URL。如果代理允许该请求,它将返回一个状态码为200的HTTP响应,使TCP连接保持开放,并在随后作为指定目标的纯TCP级中继

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值