<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. 加密