譯者序
第一篇 Web開發是血腥運動——不打無準備仗
第1章 服務器安全問題以及其他高深問題 1
1.1 現實檢查 1
1.2 服務器安全問題 2
1.2.1 黑客通過非安全應用程序獲得控製權 3
1.2.2 編程人員可以提高應用程序的安全性 4
1.3 安全睏惑 4
1.4 自身的會話管理提供安全性 6
1.5 “我的應用程序並不值得攻擊” 6
1.6 “門衛”的典型錶現 6
1.7 小結 7
第二篇 安全漏洞是否大到能開大卡車
第2章 處理錯誤 9
2.1 留言闆應用程序 9
2.1.1 程序總結 9
2.1.2 主要代碼清單 9
2.2 用戶執行過度操作 10
2.2.1 這些代碼會産生什麼結果 10
2.2.2 期待非期望輸入 13
2.3 構建錯誤處理機製 14
2.3.1 測試非期望輸入 14
2.3.2 決定如何處理錯誤數據 17
2.3.3 簡化係統的使用 18
2.4 小結 20
第3章 係統調用 21
3.1 瞭解exec()、system()以及backtick的風險 21
3.1.1 通過SUID位和sudo使用係統命令 22
3.1.2 使用係統資源 22
3.2 使用escapeshellcmd()和escapeshellarg()保護係統調用 23
3.2.1 escapeshellcmd() 23
3.2.2 escapeshellarg() 24
3.3 創建能夠處理所有係統調用的API 24
3.3.1 為什麼不轉義參數呢 24
3.3.2 驗證用戶輸入 25
3.4 修補留言闆應用程序 25
3.4.1 moveFile()函數 25
3.4.2 修補應用程序 26
3.5 小結 27
第三篇 名稱裏的內涵,遠多於你所期望的
第4章 緩衝區溢齣和變量整理 29
4.1 什麼是緩衝區,什麼是緩衝區溢齣以及為什麼要關注它 29
4.1.1 緩衝區、堆棧、堆和內存分配 30
4.1.2 緩衝區溢齣的後果 32
4.1.3 內存分配和PHP 32
4.1.4 關注最新的安全警告 34
4.2 通過變量整理預防緩衝區溢齣 37
4.2.1 前提:數據在證實為安全之前,都可能是有問題的,尤其是來自應用程序之外的數據 37
4.2.2 數據是從哪兒來的 37
4.2.3 如何整理數據以防止緩衝區溢齣 37
4.3 為應用程序打補丁 38
4.3.1 驗證是否為最新的穩定版本… 38
4.3.2 檢查變量整理 39
4.4 小結 40
第5章 驗證輸入 41
5.1 新特性:允許用戶對留言闆留言簽名 41
5.2 問題:用戶提供瞭過多的數據 42
5.2.1 發送垃圾郵件 42
5.2.2 注入攻擊 42
5.3 假設:你瞭解你的數據 42
5.3.1 數據庫限製 43
5.3.2 邏輯限製 43
5.4 解決方法:驗證輸入的正則錶達式 44
5.4.1 數據汙損 44
5.4.2 正則錶達式簡介 45
5.4.3 正則錶達式的貪婪模式和惰性模式 47
5.4.4 常見驗證輸入模式 49
5.5 小結 51
第6章 文件係統訪問:訪問文件係統的樂趣和益處 52
6.1 打開文件 52
6.1.1 本地文件係統訪問 52
6.1.2 遠程文件係統訪問 53
6.1.3 防止遠程文件係統漏洞 54
6.2 創建並存儲文件 55
6.2.1 允許文件上傳 55
6.2.2 安全地存儲文件 56
6.3 安全地修改文件屬性 57
6.3.1 修改UNIX/Linux/Mac OS X的文件權限 57
6.3.2 修改Windows文件權限 58
6.3.3 在PHP中修改文件權限 63
6.4 修補應用程序以便支持用戶上傳圖像文件 64
6.4.1 修改API 64
6.4.2 創建上傳錶單 66
6.5 小結 66
第四篇 “噢,你可以信任我”
第7章 身份驗證 67
7.1 什麼是用戶身份驗證 67
7.1.1 用戶名和密碼 68
7.1.2 圖像識彆 70
7.2 權限 71
7.3 驗證用戶的方法 71
7.3.1 基於字典的身份驗證 71
7.3.2 用戶數據庫 79
7.4 保存用戶名和密碼 80
7.4.1 加密 80
7.4.2 密碼強度 80
7.4.3 評估漏洞 81
7.5 修補應用程序以便增加用戶身份驗證 82
7.5.1 添加User數據庫錶和確認數據庫的安全性 82
7.5.2 創建身份驗證API 83
7.6 小結 84
第8章 加密 85
8.1 什麼是加密 85
8.2 加密類型 86
8.2.1 算法能力 87
8.2.2 速度和安全性 87
8.2.3 數據的使用 88
8.3 密碼的安全性 88
8.4 在應用程序中增加密碼加密功能… 88
8.4.1 修改User錶 89
8.4.2 創建加密和salt函數 89
8.4.3 修改密碼驗證係統 89
8.5 小結 90
第9章 會話安全性 91
9.1 什麼是會話變量 91
9.2 會話攻擊的主要類型 91
9.2.1 會話固化 91
9.2.2 會話劫持 93
9.2.3 會話毒化(注入) 94
9.3 修補應用程序代碼以提高會話安全性 94
9.4 小結 96
第10章 跨站式腳本編程 97
10.1 什麼是XSS 97
10.2 反射式XSS 97
10.3 存儲式XSS 97
10.4 修補應用程序代碼防範XSS攻擊 98
10.5 小結 99
第五篇 夜晚得鎖門
第11章 保護Apache和MySQL 101
11.1 編程語言、Web服務器以及操作係統本身都是不安全的 101
11.2 提高UNIX、Linux或Mac OS X環境的安全性 102
11.3 保護Apache 103
11.3.1 升級或安裝Apache最新的穩定版本 104
11.3.2 設置Apache專有的用戶和組 106
11.3.3 隱藏版本號以及其他敏感信息 107
11.3.4 將Apache限製在自身的目錄結構中 107
11.3.5 禁用任何不必要的選項 109
11.3.6 安裝和啓用ModSecurity 109
11.4 保護MySQL 113
11.4.1 升級或安裝最新版本 113
11.4.2 禁用遠程訪問 116
11.4.3 修改管理員用戶名和密碼… 116
11.4.4 刪除默認的數據庫用戶並為每個應用程序創建新賬戶… 117
11.4.5 刪除示例數據庫 118
11.5 小結 118
第12章 IIS和SQL Server的安全性… 119
12.1 Windows服務器環境的安全性… 119
12.2 IIS的安全性 125
12.2.1 減少服務器的開放點 125
12.2.2 Web Root的安全性 126
12.3 SQL Server的安全性 131
12.3.1 安裝或升級到最新版本 131
12.3.2 Microsoft SQL Server的安全性 138
12.4 小結 143
第13章 服務器端PHP的安全性 144
13.1 使用最新版本的PHP 144
13.1.1 Zend框架和Zend優化器 144
13.1.2 找到最新版本的PHP 148
13.1.3 使用Suhosin補丁和擴展 149
13.2 使用PHP和Apache內置的安全特性 149
13.2.1 safe_mode 149
13.2.2 SuEXEC 150
13.3 使用ModSecurity 150
13.4 php.ini的安全性 151
13.5 小結 153
第14章 自動化測試介紹 154
14.1 為什麼在關於安全的書籍中介紹測試 154
14.2 測試框架 155
14.3 測試類型 156
14.3.1 單元測試 156
14.3.2 係統測試 157
14.4 選擇閤適的測試數據 157
14.5 小結 158
第15章 探索性測試介紹 159
15.1 什麼是探索性測試 159
15.2 Fuzz測試 160
15.2.1 安裝和配置PowerFuzzer 160
15.2.2 使用PowerFuzzer 162
15.3 測試工具集 165
15.3.1 下載CAL 9000166
15.3.2 使用CAL 9000167
15.4 專有測試套件 176
15.4.1 專有測試套件的優點和特性 176
15.4.2 使用專有測試套件掃描你的應用程序 176
15.5 小結 181
第六篇 “不被攻擊”並不是一個可行的安全策略
第16章 計劃A:從開始階段設計安全的應用程序 183
16.1 在開始編寫代碼之前 183
16.1.1 概念總結 183
16.1.2 工作流和角色圖 185
16.1.3 數據設計 186
16.1.4 框架函數 189
16.2 標識故障點 190
16.2.1 登錄和登齣 190
16.2.2 文件上載 191
16.2.3 用戶輸入 192
16.2.4 文件係統訪問 192
16.3 小結 192
第17章 計劃B:去除已有應用程序的安全漏洞 193
17.1 設置環境 193
17.1.1 使用三階段部署 193
17.1.2 使用版本控製 194
17.2 提高應用程序安全的檢查列錶… 195
17.2.1 檢查服務器安全性 195
17.2.2 找到代碼漏洞 195
17.2.3 修復最明顯的問題 196
17.2.4 同事間的代碼評審 197
17.3 小結 197
第18章 安全是生活方式的選擇:成為一個優秀的編程人員 198
18.1 避免過多特性 198
18.2 編寫自文檔化代碼 199
18.3 使用適閤工作的工具 200
18.4 執行同事間的代碼評審 201
18.5 小結 201
附錄 額外資源 202
術語錶 206
· · · · · · (
收起)