<table width="100%" border="0" cellspacing="0" cellpadding="5" bgcolor="#649CCC"><tr valign="middle"><td align="left"> <p class="p_Heading1"><span class="f_Heading1">第四章 会话与 Cookies</span></p> </td> <td align="right"> <span style="font-size: 9pt"> <a href="introduction.htm">Top</a> <a href="new_item27.htm">Previous</a> <a href="new_item29.htm">Next</a> </span> </td> </tr></table>
<table width="100%" border="0" cellspacing="0" cellpadding="5"><tr valign="top"><td align="left"><p style="line-height: 1.50;"> 第四章 会话与 Cookies</p><p style="line-height: 1.50;"> 本章主要讨论会话和有状态的Web应用的内在风险。你会首先学习状态、cookies、与会话;然后我会讨论关于cookie盗窃、会话数据暴露、会话固定、及会话劫持的问题及防范它们的方法。</p><p style="line-height: 1.50;"> 正如大家知道的,HTTP是一种无状态的协议。这说明了两个HTTP请求之间缺乏联系。由于协议中未提供任何让客户端标识自己的方法,因此服务器也就无法区分客户端。</p><p style="line-height: 1.50;"> 虽然HTTP无状态的特性还是有一些好处,毕竟维护状态是比较麻烦的,但是它向需要开发有状态的Web应用的开发人员提出了前所未有的挑战。由于无法标识客户端,就不可能确认用户是否已登录,在购物车中加入商品,或者是需要注册。</p><p style="line-height: 1.50;"> 一个最初由网景公司构思的超强解决方案诞生了,它就是被命名为cookies的一种状态管理机制。Cookies是对HTTP协议的扩充。更确切地说,它们由两个HTTP头部组成:Set-Cookie响应头部和Cookie请求头部。</p><p style="line-height: 1.50;"> 当客户端发出对一个特定URL的请求时,服务器会在响应时选择包含一个Set-Cookie头部。它要求客户端在下面的请求中包含一个相就的Cookie头部。图4-1说明了这个基本的交互过程。</p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;">图4-1. 两个HTTP事务间Cookie的完整交互过程</p><p style="text-align: justify;"><img src="image/577391798c751.png" width="534" height="202" vspace="1" hspace="1" border="0" alt=""/></p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;"> 如果你根据这个基本概念在每一个请求中包含同一个唯一标识码(在cookie头部中),你就能唯一标识客户端从而把它发出的所有请求联系起来。这就是状态所要求的,同时也是这一机制的主要应用。</p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;">小提示</p><p style="line-height: 1.50;">迄今为止,最好的cookies使用指南依然是网景公司提供的规范,网址是:http://wp.netscape.com/newsref/std/cookie_spec.html 。它是最类似和接近于全行业支持的标准。</p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;"> 基于会话管理的概念,可以通过管理每一个客户端的各自数据来管理状态。数据被存储在会话存储区中,通过每一次请求进行更新。由于会话记录在存储时有唯一的标识,因此它通常被称为会话标识。</p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;"> 如果你使用PHP内建的会话机制,所有的这些复杂过程都会由PHP为你处理。当 你调用函数session_start()时,PHP首先要确认在本次请求中是否包含会话标识。如果有的话,PHP就会读取该会话数据并通过$_SESSION超级公用数组提供给你。如果不存在,PHP会生成一个会话标识并在会话存储区建立一个新记录。PHP还会处理会话标识的传递并在每一个请求时更新会话存储区。图4-2演示了这个过程。</p><p style="line-height: 1.50;"> </p><p style="line-height: 1.50;"> 虽然这很简便有效,但最重要的还是要意识到这并不是一个完整的解决方案,因为在PHP的会话机制中没有内建的安全处理。除此之外,由于会话标识是完全随机产生的,因此是不可预测的。你必须自行建立安全机制以防止所有其它的会话攻击手段。在本章中,我会提出一些问题,并提供相应的解决方案。</p><p style="line-height: 1.50;"> </p><hr noshade="noshade" size="1"/><p style="line-height: 1.50;"> </p></td></tr></table>
- 第一章 简介
- 1.1.PHP功能
- 1.1.1. 全局变量注册
- 1.1.2. 错误报告
- 1.2.原则
- 1.2.1. 深度防范
- 1.2.2. 最小权限
- 1.2.3. 简单就是美
- 1.2.4. 暴露最小化
- 1.3. 方法
- 1.3.1. 平衡风险与可用性
- 1.3.2. 跟踪数据
- 1.3.3. 过滤输入
- 1.3.4. 输出转义
- 第二章 表单及URL
- 2.1. 表单与数据
- 2.2. 语义URL攻击
- 2.3. 文件上传攻击
- 2.4. 跨站脚本攻击
- 2.5. 跨站请求伪造
- 2.6. 欺骗表单提交
- 2.7. HTTP请求欺骗
- 第三章 数据库及SQL
- 3.1. 访问权限暴露
- 3.2. SQL 注入
- 3.3. 数据的暴露
- 第四章 会话与 Cookies
- 4.1. Cookie 盗窃
- 4.2. 会话数据暴露
- 4.3. 会话固定
- 4.4. 会话劫持
- 第五章 包含
- 5.1. 源码暴露
- 5.2. 后门URL
- 5.3. 文件名操纵
- 5.4. 代码注入
- 第六章 文件与命令
- 6.1. 文件系统跨越
- 6.2. 远程文件风险
- 6.3. 命令注入
- 第七章 验证与授权
- 7.1. 暴力攻击
- 7.2. 密码嗅探
- 7.3. 重播攻击
- 7.4. 永久登录
- 第八章 共享主机
- 8.1. 源码暴露
- 8.2. 会话数据暴露
- 8.3. 会话注入
- 8.4. 文件系统浏览
- 8.5. 安全模式
- 附录 A. 配置选项
- 附录B. 函数
- 附录C. 加密