Oh!Coder

Coding Life

读《HTTP权威指南》笔记(三)

| Comments

这一部分的主题是识别、认证与安全。对应的章节,整体上也是根据这三方面展开的。这部分共分为四章,前三章每一章讲解一个主题,最后一章介绍了密码学、数字证书和安全套接字层。下面还是按照老样子,针对每一章做一个简要的记录和总结。

本章一开始通过介绍Amazon在线网店的站点个性化,引入了用户识别的话题。针对用户识别机制,本章通过一下几个方面进行了讨论(Page.272)。

  • 承载用户身份信息的HTTP首部。
  • 客户端IP地址跟踪,通过用户的IP地址对其进行识别。
  • 用户登陆,用认证方式来识别用户。
  • 胖URL,一种在URL中嵌入识别信息的技术。
  • cookie,一种功能强大且高效的持久身份识别技术。

后面的章节基本也是针对这几方面展开的。接下来我们依次进行记录。

HTTP首部

这部分书中提到了七种常见的用来承载用户相关信息的HTTP请求首部(Page.273)。

  1. 首部名称:From
    首部类型:请求
    描述:用户的E-mail地址

  2. 首部名称:User-Agent
    首部类型:请求
    描述:用户的浏览器软件

  3. 首部名称:Referer
    首部类型:请求
    描述:用户是从这个页面上依照链接跳转过来的

  4. 首部名称:Authorization
    首部类型:请求
    描述:用户名和密码

  5. 首部名称:Client-IP
    首部类型:扩展(请求)
    描述:客户端的IP地址

  6. 首部名称:X-Forwarded-For
    首部类型:扩展(请求)
    描述:客户端的IP地址

  7. 首部名称:Cookie
    首部类型:扩展(请求)
    描述:服务器产生的ID标签

这几种首部类型,接下来在讲其他小节的时候都进行了讲解。

第一种,Form首部(Page.273)

Form首部包含了用户的E-mail地址。每个用户都有不同的E-mail地址,所以在理想情况下,可以将这个地址作为可行的源端来识别用户。实际上,Form首部是由自动化的机器人或蜘蛛发送的。

第二种,User-Agent首部(Page.273)

User-Agent首部可以将用户所有用浏览器的相关信息告知服务器,包括程序的名称和版本,通常还包含操作系统的相关信息。

第三种,Referer首部(Page.273~Page.274)

Referer首部提供了用户来源页面的URL。Referer首部自身并不能完全标示用户,但它确实说明了用户之前访问过哪个页面。通过它可以更好地理解用户的浏览行为,以及用户的兴趣所在。

第四种,Authorization首部(Page.275)

Authorization首部向Web站点传递用户的相关信息。

第五种,Client-IP首部(Page.274)

顾名思义,用来保存原始的IP地址。

第六种,X-Forwarded-For首部(Page.274)

这个首部也是用来保存原始的IP地址。至于和Client-IP首部的区别,我在网上查了一下,在Stackoverflow上有人说很难讲清楚,因为这不是两个标准,不同的代理会有各自的策略。

第七种,Cookie首部(Page.278)

可以笼统地将cookie分为两类:会话cookie和持久cookie。会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好。持久cookie的生存时间更长一些,它们存储在硬盘上,浏览器退出,计算机重启时它们仍然存在。

客户端IP地址(Page.274)

这一节主要讲通过IP地址来获取客户端信息。主要介绍了获取到的IP地址的特点,等等。

用户登录(Page.275~Page.276)

这部分介绍了一下上面提到的两个概念。一个是WWW-Authentication首部,另一个是Authorization首部,这两个首部都是用来进行用户名和密码登录认证的。

胖URL(Page.277~Page.278)

这一节主要讲了胖URL的概念。并提了几点使用胖URL的问题。(Page.277)改动后包含用户状态信息的URL被称为URL(fat URL)。使用胖URL时候的几个严重问题包括(Page.277~Page.278)。

  • 丑陋的URL
  • 无法共享URL
  • 破坏缓存
  • 额外的服务器负荷
  • 逃逸口
  • 在会话间是非持久的

cookie(Page.278~Page.291)

上面在HTTP首部中,提到过cookie。可以笼统的将cookie分为两类:会话cookie和持久cookie。会话cookie和持久cookie之间的唯一区别就是它们的过期时间。

cookie中包含了一个由名字=值(name=value)这样的信息构成的任意列表,并通过Set-Cookie或Set-Cookie2 HTTP响应(扩展)首部将其贴到用户身上去。cookie中可以包含任意信息,但它们通常都只包含一个服务器为了进行跟踪而产生的独特的标示码。

(Page.280)cookie的基本思想就是让浏览器积累一组服务器特有的信息,每次访问服务器时都将这些信息提供给它。因为浏览器要负责存储cookie信息,所以此系统被称为客户端侧状态(client-side state)。这个cookie规范的正式名称为HTTP状态管理机制(HTTP state management mechanism)。

对于不同的站点会使用不同的cookie。浏览器只会向服务器发送服务器产生的那些cookie。

在cookie成分这一小节中,书中提到了两个不同版本的cookie规范(Page.283):cookies版本0(有时被称为Netscape cookies)和cookies版本1(RFC 2965)。cookies版本1是对cookies版本0的扩展,应用不如后者广泛。

对于最初的cookie规范是由网景公司定义的。RFC2965(以前的RFC2109)定义了一个cookie的扩展版本。这个版本1标准引入了Set-Cookie2首部和Cookie2首部,但它也能与版本0系统进行互操作。

cookie与会话跟踪这部分,书中用图文的形式对整个过程做了一个简介。

在cookie与缓存这部分,书中给出了一些处理缓存时的指导性原则(Page.290)。

  • 如果无法缓存文档,要将其标示出来。
  • 缓存Set-Cookie首部时要小心。
  • 小心处理带有Cookie首部的请求。

对于cookie的安全性与隐私,指出(Page.291)第三方web站点使用持久cookie来跟踪用户就是一种最大的滥用。

第十二章:基本认证机制

最常见的认证方式分为基本认证和摘要认证。本章对基本认证做了讨论。下一章对摘要认证进行讲解。

首先,本章一开始给出了基本认证的概念。(Page.297)基本认证是最流行的HTTP认证协议。在基本认证中,Web服务器可以拒绝一个事务,质询客户端,请用户提供有效的用户名和密码。

HTTP基本认证将(由冒号分割的)用户名和密码打包在一起,并用Base-64编码方式对其进行编码。

基本认证在安全方面是有缺陷的,所以将基本认证与加密数据传输(比如SSL)配合使用,向恶意用户隐藏用户名和密码,会使基本认证变得更加安全。这是一种常用的技巧。

本章主要就讲了这些。内容比较少,呵呵。

第十三章:摘要认证

这一章主要介绍了摘要认证。那么什么是摘要呢?

(Page.306)摘要是“对信息主体的浓缩”。摘要是一种单向函数,主要用于将无限的输入值转换为有限的浓缩输出值。

例如,常见的摘要函数MD5,会将任意长度的字节序列转换为一个128位的摘要。然而,如果紧紧使用摘要还是有可能会遇到麻烦。比如重放攻击。为了防止类似重放攻击的发生,这个数会经常发生变化(可能是每毫秒,或者是每次认证都变化)。使用的随机数是在WWW-Authenticate质询中从服务器传送给客户端的。

摘要是根据三个组件计算出来的(Page.308~Page.310)。

  • 由单向散列函数H(d)和摘要KD(s,d)组成的一对函数,其中s表示密码,d表示数据。
  • 一个包含了信息安全的数据块,包括密码,称为A1。
  • 一个包含了请求报文中非保密属性的数据块,称为A2。

其中,H和KD处理两块数据A1和A2,产生摘要。

不管使用的是MD5还是MD5-sess,都会用函数H来计算数据的MD5,用摘要函数KD来计算以冒号连接的密码和非保密数据的MD5.例如:

H(\<data\> = MD5(\<data\>) KD(\<secret\>,\<data\> = H(concatenate(\<secret\>:\<data\>))

这里,被称为A1的数据块是密码和受保护信息的产物,它包含有用户名、密码、保护域和随机数等内容。A1只涉及安全信息,与底层报文无关。

RFC 2617根据选择的算法定义了两种计算A1的方式(Page.310)。

  • MD5
    为每条请求运行单向散列函数。A1是由冒号连接起来的用户名、域以及密码三元组。
  • MD5-sess
    只在第一次WWW-Authenticate握手时运行一次散列函数。

数据块A2表示的是与报文自身有关的信息。A2有助于防止方法,资源或报文被篡改。
RFC 2617根据所选择的保护质量(qop),为A2定义了两种策略(Page.311)。

  • 第一种策略只包含HTTP请求方法和URL。当qop=”auth”时使用这种策略,这是默认的情况。
  • 第二种策略添加了报文实体的主体部分,以提供一定程度的报文完整性检测。qop=”auth-int”时使用。

最后,RFC 2617定义了两种给定了H、KD、A1和A2之后,计算摘要的方式(Page.311)。

  • 第一种方式要与老规范RFC 2069兼容,在没有qop选项的时候使用。它是用保密信息和随即报文数据的散列值来计算摘要的。
  • 第二种方式是现在的推荐使用的方式——这种方式包含了对随机数计算和对称认证的支持。

增强保护质量小节中提到,(Page.316)RFC 2617定义了两种保护质量的初始值:表示认证的auth,带有报文完整性保护的认证auth-int

安全性考虑

在这部分中,描述了几种风险(Page.320~Page.322)。

  • 首部篡改
    摘要认证的重点在于提供一种防篡改认证机制,但并不一定要将这种保护扩展到数据上去。

  • 重放攻击
    在当前的上下文中,重放攻击指的就是有人将从某个事务中窃取的认证书用于另一个事务。

  • 多重认证机制
    服务器支持多重认证机制(比如基本认证和摘要认证)时,通常会在WWW-Authenticate首部提供选项。

  • 词典攻击
    词典攻击是典型的密码猜测攻击方式。

  • 恶意代理攻击和中间人攻击
    随着重定向技术和拦截代理的出现,用户甚至都意识不到他的请求穿过了某个代理。如果这些代理中有一个人是恶意的或者容易被入侵的,就会使客户端置于中间人攻击之下。防止这种攻击唯一简便的方式就是使用SSL。

  • 存储密码
    摘要认证机制将对比用户的响应与服务器内部存储的内容——通常就是用户名和H(A1)元组对,其中H(A1)是从用户名、域和密码的摘要中导出的。

  • 选择明文攻击
    使用已知密钥来计算响应可以简化响应的密码分析过程。这种方式被称为选择明文攻击(chosen plaintext attack)。选择明文攻击有以下几种变体形式(Page.321~Page.322)。

1、预先计算的词典攻击。
2、批量暴力型攻击。

第十四章:安全HTTP

前三章分别从三个方面对安全进行了讲解。这一章当然还是在讲安全,只不过讲解的是内容更复杂,更安全的技术,通过数字密码来保护HTTP事务免受窃听和篡改的侵害。

在数字加密技术的介绍中,书中介绍了一些相关的基本概念。这里简单的进行一些罗列。

密码(Page.327)

密码是一套编码方案——一种特殊的报文编码方式和一种稍后使用的相应解码方式的结合体。加密之前的原始报文通常被称为明文(plaintext或cleartext)。使用了密码之后的编码报文通常被称作密文(ciphertext)

密码机(Page.328)

随着技术的进步,人们开始制造一些及其,这些机器可以用复杂得多的密码来快速、精确地对报文进行编解码。

密钥(Page.328)

改变密码行为的数字化参数。

对称密钥加密(Page.330)

很多数字加密算法都被称为对称密钥(symmetric-key)加密技术,这是因为它们在编码时使用的密钥值和解码时一样(e=d)。我们就将其统称为密钥k。流行的对称密钥加密算法包括:DES、Triple-DES、RC2和RC4。

公开密钥加密(Page.332)

公开密钥加密技术没有为每对主机使用单独的加密/解密密钥,而是使用了两个非对称密钥:一个用来对主机报文编码,另一个用来对主机报文解码。

数字签名(Page.334)

除了加/解密报文之外,还可以用加密系统对报文进行签名(sign),以说明是谁编写的报文,同时证明报文未被篡改过。这种技术被称为数字签名(digital signing)

使用数字签名有两个好处(Page.334~Page.335)

  • 签名可以证明是作者编写了这条报文。
  • 签名可以防止报文被篡改。

所以可以将作者的私有密钥当作一种“指纹”使用。

数字证书(Page.336)

数字证书(通常被称作“certs”)中包含了由某个受信任组织担保的用户或公司的相关信息。

X.509 v3证书提供了一种标准的方式,将证书信息规范至一些可解析字段中。

HTTPS介绍

(Page.339)HTTPS将HTTP协议与一组强大的对称、非对称和基于证书的加密技术结合在一起,使得HTTPS不仅很安全,而且很灵活,很容易在处于无序状态的、分散的全球互联网上进行管理。

SSL是个二进制协议,与HTTP完全不同,其流量是承载在另一个端口上的(SSL通常是由端口443承载的)。

OpenSSL(Page.328)

OpenSSL是SSL和TLS最常见的开源实现。OpenSSL是SSLeay库的后继者,接口非常相似。

代理是防火墙路由器唯一允许进行HTTP流量交换的设备,它可能会进行病毒检测或其他的内容控制工作。

以上就是第十四章的整体内容。整个第三部分基本上就是在说Web安全相关内容,第十四章感觉稍微有点杂乱,知识点比较零碎。

Comments