目 錄
第1部分
第1章 概述
1.1 理解安全的Web開發(fā)
1.1.1 適用讀者
1.1.2 本書未涉及的內(nèi)容
1.1.3 背景知識
1.1.4 安全工具
1.1.5 在項目間創(chuàng)建一致性的可復(fù)用代碼
1.2 基于HTML5、AJAX和jQuery Mobile的移動應(yīng)用程序
1.3 移動應(yīng)用程序社交混搭
1.3.1 客戶端技術(shù)
1.3.2 客戶端應(yīng)用程序布局
1.3.3 服務(wù)器應(yīng)用程序
1.4 安全措施的演變
1.4.1 SQL注入和CSRF
1.4.2 輸出上下文攻擊
1.4.3 HTML5新技術(shù)
1.4.4 實踐與漏洞
1.4.5 安全擴(kuò)展插件
1.4.6 信息缺失
1.4.7 一致性缺失
1.5 Web應(yīng)用程序安全的新思路
第2章 Web應(yīng)用程序攻擊界面
2.1 攻擊途徑
2.2 常見威脅
2.2.1 SQL注入
2.2.2 跨站點腳本
2.2.3 跨站點請求偽造
2.2.4 會話劫持
2.3 保護(hù)輸入和輸出流
2.3.1 GET請求
2.3.2 POST請求
2.3.3 Cookie數(shù)據(jù)
2.3.4 會話固定
2.3.5 跨站點請求偽造
2.4 輸入過濾和輸出轉(zhuǎn)義的理論知識
2.4.1 輸入驗證
2.4.2 輸入過濾
2.4.3 輸出轉(zhuǎn)義
2.4.4 數(shù)據(jù)的顯示位置
2.5 OWASP XSS Prevention Rules
第3章 PHP安全反模式
3.1 反模式
3.2 不使用內(nèi)容安全策略反模式進(jìn)行設(shè)計
3.3 單一尺寸適合所有的反模式
3.4 錯誤的反模式
3.4.1 經(jīng)驗式反模式
3.4.2 關(guān)鍵數(shù)據(jù)類型的理解和分析
3.4.3 單一數(shù)據(jù)類型反模式
3.5 全部輸入的HTTP數(shù)據(jù)均為字符串
3.5.1 類型驗證
3.5.2 輸入內(nèi)容與輸出內(nèi)容相同
3.5.3 假定的干凈數(shù)據(jù)
3.5.4 mysql_real_escape_string()的錯誤使用方式
3.5.5 過濾、轉(zhuǎn)義和編碼
3.5.6 單一輸出上下文
3.5.7 缺乏規(guī)劃
3.5.8 一致性缺失
3.5.9 缺少應(yīng)有的測試
3.5.10 參數(shù)遺漏
3.6 設(shè)計實踐
3.6.1 HTML和PHP代碼的分離
3.6.2 過多的數(shù)據(jù)庫函數(shù)調(diào)用
3.6.3 錯誤的過濾機(jī)制
3.6.4 過多的引號
3.6.5 原始請求變量作為應(yīng)用程序變量
3.6.6 直接URL輸入
3.6.7 錯誤管理操作
3.6.8 加密操作
3.6.9 Cookie過期
3.6.10 會話管理
3.7 消除反模式:模式、測試、自動化
第4章 PHP基本安全
4.1 一致的UTF-8字符集
4.1.1 數(shù)據(jù)庫中的UTF-8
4.1.2 PHP應(yīng)用程序中的UTF-8
4.1.3 客戶瀏覽器中的UTF-8
4.2 清理安全數(shù)據(jù)
4.2.1 輸入驗證尺寸和類型
4.2.2 轉(zhuǎn)義輸出考查上下文
4.2.3 數(shù)據(jù)庫訪問模式
4.2.4 應(yīng)用程序秘密位置模式
4.2.5 錯誤處理模式
4.2.6 錯誤的日志處理模式
4.2.7 身份驗證
4.2.8 授權(quán)模式
4.2.9 可接受的白名單輸入
4.3 實踐方案小結(jié)
4.3.1 架構(gòu)應(yīng)用程序字符集
4.3.2 架構(gòu)HTTP請求模式
4.3.3 架構(gòu)HTTP Cookie應(yīng)用
4.3.4 架構(gòu)輸入驗證
4.3.5 架構(gòu)輸出轉(zhuǎn)義
4.3.6 架構(gòu)會話管理
4.3.7 保護(hù)機(jī)密文件/保護(hù)包含的文件
4.3.8 保護(hù)用戶密碼
4.3.9 保護(hù)用戶會話數(shù)據(jù)
4.3.10 防護(hù)CSRF攻擊
4.3.11 防護(hù)SQL注入攻擊
4.3.12 防護(hù)XSS攻擊
4.3.13 防護(hù)文件系統(tǒng)攻擊
4.3.14 相應(yīng)的錯誤管理機(jī)制
4.4 PHP的OWASP推薦方案
4.4.1 檢查表
4.4.2 附加的PHP安全檢查表
4.4.3 禁用危險的PHP函數(shù)
第5章 PHP安全工具概覽
5.1 對象語言
5.1.1 抽象類、接口、外觀、模板、策略、工廠和訪問者
5.1.2 DRY
5.2 本地函數(shù)支持
5.2.1 編碼函數(shù)
5.2.2 DRY強制函數(shù)
5.2.3 類型強制函數(shù)
5.2.4 過濾器函數(shù)
5.2.5 移動函數(shù)
5.2.6 加密和哈希函數(shù)
5.2.7 現(xiàn)代加密
5.2.8 現(xiàn)代哈希方法
5.2.9 現(xiàn)代salt機(jī)制和隨機(jī)機(jī)制
5.2.10 HTML模板支持
5.2.11 內(nèi)聯(lián)定界符函數(shù)
5.3 實踐方案
5.3.1 盡可能使用整數(shù)值
5.3.2 使用類型強制
5.3.3 強制字符串大小和數(shù)字范圍
5.3.4 在過濾前剪裁字符串
5.3.5 保持較小的字符串
5.3.6 要避免的問題
5.4 PDO預(yù)處理語句
5.5 棄用的安全函數(shù)
第6章 基于UTF-8的PHP和MySQL
6.1 UTF-8
6.1.1 UTF-8的優(yōu)缺點
6.1.2 UTF-8的安全性
6.2 完整的PHP UTF-8設(shè)置
6.2.1 UTF-8 MySQL數(shù)據(jù)庫和表創(chuàng)建
6.2.2 UTF-8 PDO客戶端連接
6.2.3 手動UTF-8 PDO/MySQL連接
6.2.4 PHP UTF-8初始化和安裝
6.3 UTF-8瀏覽器設(shè)置
6.3.1 頭設(shè)置
6.3.2 元標(biāo)簽設(shè)置
6.3.3 表單設(shè)置
6.4 PHP UTF-8多字節(jié)函數(shù)
6.4.1 UTF-8輸入驗證函數(shù)
6.4.2 UTF-8字符串函數(shù)
6.4.3 UTF-8輸出函數(shù)
6.4.4 UTF-8郵件
6.5 PHPUnit測試中的UTF-8配置
6.5.1 測試PHP內(nèi)部編碼
6.5.2 測試PHP輸出編碼
6.5.3 斷言UTF-8配置的PHPUnit Test類
第7章 項目布局模板
7.1 應(yīng)用程序中的相似性
7.1.1 項目布局應(yīng)采用一致性方式進(jìn)行處理
7.1.2 選擇查詢封裝器
7.1.3 HTML靜態(tài)資源的分離
7.2 完整的注釋文件
第8章 關(guān)注點分離
8.1 什么是關(guān)注點分離
8.2 保持HTML為HTML
8.3 令PHP遠(yuǎn)離HTML
8.4 令JavaScript遠(yuǎn)離HTML
8.5 內(nèi)容安全性策略
8.6 HTML中的ID和類
8.7 小結(jié)
第9章 PHP和PDO
9.1 PDO UTF-8連接
9.2 MySQL UTF-8和表創(chuàng)建
9.3 PDO預(yù)處理語句
9.3.1 PDO命名參數(shù)示例
9.3.2 PDO未命名參數(shù)示例
9.3.3 PDO類對象示例
9.4 選擇數(shù)據(jù)并置入HTML和URL上下文
9.5 引用值和數(shù)據(jù)庫類型轉(zhuǎn)換
9.5.1 PDO手工引用示例
9.5.2 PDO和WHERE IN語句
9.6 白名單機(jī)制和PDO列名引用
9.7 小結(jié)
第10章 模板策略模式
10.1 模板模式強制執(zhí)行流程
10.1.1 賬戶注冊模板
10.1.2 賬戶注冊模板激活
10.2 輸出轉(zhuǎn)義的策略模式
10.2.1 轉(zhuǎn)義策略類
10.2.2 改進(jìn)的轉(zhuǎn)義策略類
10.3 Cleaner類
10.3.1 測試Cleaner類
10.3.2 Cleaner::getKey()驗證應(yīng)用示例
第11章 現(xiàn)代PHP加密技術(shù)
11.1 使用MCrypt進(jìn)行雙向加密
11.2 利用Blowfish加密哈希密碼
第12章 異常和錯誤處理
12.1 配置PHP錯誤環(huán)境
12.1.1 安全的php.ini和錯誤日志文件
12.1.2 錯誤選項簡介
12.1.3 生產(chǎn)環(huán)境下的php.ini錯誤配置
12.1.4 開發(fā)環(huán)境下的php.ini錯誤配置
12.1.5 PHP錯誤級別常量
12.2 異常處理機(jī)制
12.3 捕獲所有錯誤和異常
12.3.1 將錯誤轉(zhuǎn)換為異常
12.3.2 錯誤處理函數(shù)的規(guī)范
12.3.3 處理程序的返回值
12.4 ErrorManager類
12.5 利用register_shutdown_function()處理致命錯誤
第2部分
第13章 安全的會話管理
13.1 SSL登錄頁面
13.1.1 安全會話管理簡介
13.1.2 安全會話管理檢查表
13.1.3 檢查表的詳細(xì)內(nèi)容
13.1.4 設(shè)置配置內(nèi)容
13.1.5 監(jiān)控會話篡改
13.1.6 檢測用戶代理的更改篡改防護(hù)的實踐方案
13.2 通過SSL強制頁面請求
13.2.1 SSL重定向
13.2.2 協(xié)議相關(guān)鏈接
第14章 安全的會話存儲
14.1 PHP默認(rèn)會話存儲
14.1.1 會話存儲的生命周期
14.1.2 會話鎖
14.1.3 AJAX和會話鎖
14.2 會話管理配置
14.2.1 在session_start()調(diào)用前配置安全項
14.2.2 正確地銷毀會話
14.3 加密會話存儲
14.3.1 通過MySQL加密會話存儲
14.3.2 在MySQL中創(chuàng)建自定義會話處理程序
14.3.3 SecureSessionPDO類
14.3.4 評論和決策時間
14.3.5 類成員函數(shù)的細(xì)節(jié)內(nèi)容
14.3.6 通過文件系統(tǒng)加密會話存儲
14.3.7 SecureSessionFile類
14.3.8 SecureSessionFile類的細(xì)節(jié)內(nèi)容
第15章 安全的表單和賬戶注冊
15.1 安全的用戶注冊和登錄處理
15.2 SSL上的安全表單登錄頁面
15.3 安全的表單nonce防止CSRF
15.4 NonceTracker類
15.4.1 NonceTracker類的詳細(xì)信息
15.4.2 NonceTracker類的具體解釋
15.5 表單輸入驗證
15.5.1 注冊表單
15.5.2 注冊表單的細(xì)節(jié)內(nèi)容
15.5.3 用戶密碼的雙重加密
15.6 賬戶管理類
15.6.1 AccountManager類細(xì)節(jié)內(nèi)容和授權(quán)檢測
15.6.2 電子郵件驗證和激活系統(tǒng)
15.6.3 基于Blowfish輪數(shù)的加密強度
15.6.4 安全的密碼請求鏈接
15.6.5 權(quán)限提升后的重新授權(quán)
15.7 SessionManager類
15.7.1 SessionManagement類的詳細(xì)內(nèi)容
15.7.2 基于essionManager的安全注銷
15.8 權(quán)限提升保護(hù)系統(tǒng)
15.9 安全的登錄
15.9.1 安全的登錄表單
15.9.2 安全的登錄表單細(xì)節(jié)
15.10 通過身份驗證保護(hù)頁面
15.11 安全的注銷頁面
15.12 安全的RememberMe特性
第16章 安全的客戶端服務(wù)器表單驗證
16.1 PHP UTF-8輸入驗證
16.1.1 服務(wù)器UTF-8驗證
16.1.2 通過RegEx驗證UTF-8名稱和電子郵件
16.1.3 電子郵件地址的清除工作
16.2 PREG
16.2.1 服務(wù)器端的正則表達(dá)式
16.2.2 基于正則表達(dá)式的JavaScript驗證
16.2.3 基于正則表達(dá)式的jQuery驗證
16.3 jQuery密碼強度計
16.4 JavaScript和jQuery轉(zhuǎn)義和過濾
16.4.1 利用innerText替換innerHTML
16.4.2 嵌入式HTML超鏈接innerHTML中的問題
16.4.3 不安全的JavaScript函數(shù)
16.5 防止雙重表單提交
16.5.1 表單處理的Post-Redirect-Get模式
16.5.2 PRG模式
16.5.3 PRG指令
16.5.4 跟蹤表單標(biāo)記以防止重復(fù)提交
16.6 控制表單頁面緩存和頁面過期
16.6.1 主緩存-控制設(shè)置
16.6.2 微軟IE擴(kuò)展
16.6.3 AJAX GET請求的時間戳機(jī)制
16.6.4 構(gòu)建安全的GET請求URL
第17章 安全的文件上傳機(jī)制
17.1 基本原則
17.2 基于數(shù)據(jù)庫的安全的文件上傳機(jī)制
第18章 安全的JSON請求
18.1 構(gòu)建安全的JSON響應(yīng)
18.1.1 正確和錯誤的JSON
18.1.2 正確的JSON結(jié)構(gòu)依賴于數(shù)組結(jié)構(gòu)
18.1.3 利用PDO記錄構(gòu)造安全的數(shù)組
18.2 在PHP中發(fā)送和接收J(rèn)SON
18.2.1 從PHP發(fā)送JSON
18.2.2 在PHP中接收J(rèn)SON
18.3 利用JavaScript/jQuery安全地解析JSON
18.3.1 jQuery JSON調(diào)用
18.3.2 POST和解析JSON響應(yīng)示例
第3部分
第19章 Google Maps、YouTube和jQuery Mobile
19.1 代碼構(gòu)建
19.2 在Google Map InfoWindows中設(shè)置視頻
19.3 生成InfoWindow Marker
19.3.1 HTML和jQuery Mobile布局
19.3.2 關(guān)注點分離
19.3.3 HTML片段描述
19.3.4 YouTube元素描述
19.3.5 JavaScript文件:gmap.js
19.3.6 基于可播放視頻的InfoWindow Marker
19.4 Map Marker數(shù)據(jù)庫表
19.5 數(shù)據(jù)庫類GMapData
19.5.1 處理標(biāo)記
19.5.2 生成標(biāo)記
19.5.3 插入和更新標(biāo)記
19.6 準(zhǔn)備安全的JSON數(shù)據(jù)
第20章 Twitter身份驗證和SSL cURL
20.1 基于PHP的Twitter
20.2 TweetFetcher類
20.3 通過TweetFetcher讀取tweet
20.3.1 獲取Twitter oAuth令牌
20.3.2 針對cURL設(shè)置SSL身份驗證
20.3.3 從時間軸上檢索的tweet
20.3.4 創(chuàng)建和過濾純文本中的超鏈接
20.4 過濾不良的tweet
20.5 使用TweetFetcher
第21章 安全的AJAX購物車
21.1 移動商店
21.1.1 向購物車中添加商品
21.1.2 從購物車中移除商品
21.2 利用PayPal購物
21.2.1 開始PayPal事務(wù)
21.2.2 安全地向PayPal付款
21.2.3 完成PayPal購買行為
21.3 小結(jié)
第22章 常見的Facebook漏洞點
22.1 通過PDO保存Facebook實時更新
22.2 反射JSON坐標(biāo)
22.3 反射消息
22.4 反射URL
22.5 JavaScript和jQuery過濾器
22.6 JSONP預(yù)防措施
參考文獻(xiàn)
附錄
在線資源
理解編碼器背后的正則表達(dá)式
根據(jù)的安全警告檢查HTML頭
支持網(wǎng)站
推薦讀物