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级中继