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