內容簡介
針對安全編程技術,《軟體安全實現:安全編程技術》不局限於某一門特定語言,而是將編程過程中的通用安全問題進行全面總結,逐步引領讀者從基礎到各個知識點進行學習,以便能開發出安全可靠的系統。全書內容由淺入深,並輔以大量的實例說明,每一個章節以實際案例為起點進行講解,通俗易懂。
全書所有實例的原始碼均可在清華大學出版社的網站上下載,供讀者學習參考使用。
《軟體安全實現:安全編程技術》可作為有一定編程基礎的程式設計師的學習用書,也可供有經驗的開發人員深入學習使用,更可以為高等學校、培訓班作為教材使用,對於缺乏安全編程實戰經驗的程式設計師而言,閱讀《軟體安全實現:安全編程技術》可以快速積累經驗,提高編程水平。
目錄
第1章 安全編程概述
1.1 軟體的安全問題
1.1.1 任何軟體都是不安全的
1.1.2 軟體不安全性的幾種表現
1.1.3 軟體不安全的原因
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 其他內容
小結
練習
參考文獻
第2章 記憶體安全
2.1 緩衝區溢出
2.1.1 緩衝區
2.1.2 緩衝區溢出
2.1.2 緩衝區溢出
2.1.3 緩衝區溢出案例
2.1.4 堆溢出
2.1.5 緩衝區溢出攻擊
2.1.6 防範方法
2.2 整數溢出
2.2.1 整數的存儲方式
2.2.2 整數溢出
2.2.3 解決方案
2.3 數組和字元串問題
2.3.1 數組下標問題
2.3.2 字元串格式化問題
小結
練習
參考文獻
第3章 執行緒/進程安全
3.1 執行緒機制
3.1.1 為什麼需要執行緒
3.1.2 執行緒機制和生命周期
3.2 執行緒同步安全
3.2.1 執行緒同步
3.2.2 案例分析
3.2.3 解決方案
3.3 執行緒協作安全
3.3.1 執行緒協作
3.3.2 案例分析
3.3.3 解決方案
3.4 執行緒死鎖安全
3.4.1 執行緒死鎖
3.4.2 案例分析
3.4.3 解決方案
3.5 執行緒控制安全
3.5.1 安全隱患
3.5.2 案例分析
3.5.3 解決方案
3.6 進程安全
3.6.1 進程概述
3.6.2 進程安全問題
小結
練習
參考文獻
第4章 異常/錯誤處理中的安全
4.1 異常/錯誤的基本機制
4.1.1 異常的出現
4.1.2 異常的基本特點
4.2 異常捕獲中的安全
4.2.1 異常的捕獲
4.2.2 異常捕獲中的安全
4.3 異常處理中的安全
4.3.1 finally的使用安全
4.3.2 異常處理的安全
4.4 面向過程異常處理中的安全問題
4.4.1 面向過程的異常處理
4.4.2 安全準則
小結
練習
第5章 輸入安全
5.1 一般性討論
5.1.1 輸入安全概述
5.1.2 預防不正確的輸入
5.2 幾種典型的輸入安全問題
5.2.1 數字輸入安全問題
5.2.2 字元串輸入安全問題
5.2.3 環境變數輸入安全問題
5.2.4 檔案名稱安全問題
5.3 資料庫輸入安全問題
5.3.1 資料庫概述
5.3.2 資料庫的惡意輸入
5.3.3 賬戶和口令問題
小結
練習
參考文獻
第6章 國際化安全
6.1 國際化的基本機制
6.1.1 國際化概述
6.1.2 國際化過程
6.2 國際化中的安全問題
6.2.1 字元集
6.2.2 字元集轉換
6.2.3 I18N緩衝區溢出問題
6.3 推薦使用Unicode
小結
練習
參考文獻
第7章 面向對象中的編程安全
7.1 面向對象概述
7.1.1 面向對象基本原理
7.1.2 面向對象的基本概念
7.2 對象記憶體分配與釋放
7.2.1 對象分配記憶體
7.2.2 對象記憶體釋放
7.2.3 對象執行緒安全
7.2.4 對象序列化安全
7.3 靜態成員安全
7.3.1 靜態成員的機理
7.3.2 靜態成員需要考慮的安全問題
7.3.3 利用單例提高程式性能
小結
練習
第8章 Web編程安全
8.1 Web概述
8.1.1 Web運行的原理
8.1.2 Web編程
8.2 避免URL操作攻擊
8.2.1 URL的概念及其工作原理
8.2.2 URL操作攻擊
8.2.3 解決方法
8.3 頁面狀態值安全
8.3.1 URL傳值
8.3.2 表單傳值
8.3.3 Cookie方法
8.3.4 session方法
8.4 Web跨站腳本攻擊
8.4.1 跨站腳本攻擊的原理
8.4.2 跨站腳本攻擊的危害
8.4.3 防範方法
8.5 SQL注入
8.5.1 SQL注入的原理
8.5.2 SQL注入攻擊的危害
8.5.3 防範方法
8.6 避免Web認證攻擊
8.6.1 Web認證攻擊概述
8.6.2 Web認證攻擊防範
小結
練習
第9章 許可權控制
9.1 許可權控制概述
9.1.1 許可權控制分類
9.1.2 用戶認證方法
9.2 許可權控制的開發
9.2.1 開發思想
9.2.2 基於代理模式的許可權控制開發
9.2.3 基於AOP的許可權控制開發
9.3 單點登錄
9.3.1 單點登錄概述
9.3.2 單點登錄中賬號管理
9.3.3 單點登錄實現
9.4 許可權控制的管理
小結
練習
第10章 遠程調用和組件安全
10.1 遠程調用安全
10.1.1 遠程調用概述
10.1.2 安全問題
10.2 ActiveX安全
10.2.1 ActiveX概述
10.2.2 安全問題
10.3 JavaApplet安全
10.3.1 JavaApplet概述
10.3.2 安全問題
10.4 DCOM安全
10.4.1 DCOM概述
10.4.2 安全問題
10.5 EJB安全
10.5.1 EJB概述
10.5.2 開發安全的EJB
10.6 CORBA安全
10.6.1 CORBA概述
10.6.2 CORBA安全概述
小結
練習
參考文獻
第11章 避免拒絕服務攻擊
11.1 拒絕服務攻擊
11.2 幾個拒絕服務攻擊的案例
11.2.1 程式崩潰攻擊
11.2.2 資源不足攻擊
11.2.3 惡意訪問攻擊
小結
練習
參考文獻
第12章 數據的加密保護
12.1 加密概述
12.1.1 加密的套用
12.1.2 常見的加密算法
12.2 實現對稱加密
12.2.1 用Java實現DES
12.2.2 用Java實現3DES
12.2.3 用Java實現AES
12.3 實現非對稱加密
12.3.1 用Java實現RSA
12.3.2 DSA算法
12.4 實現單向加密
12.4.1 用Java實現MD5
12.4.2 用Java實現SHA
12.4.3 用Java實現訊息驗證碼
12.5 密鑰安全
12.5.1 隨機數安全
12.5.2 密鑰管理安全
小結
練習
參考文獻
第13章 數據的其他保護
13.1 數據加密的限制
13.2 密碼保護與驗證
13.3 記憶體數據的保護
13.3.1 避免將數據寫入硬碟檔案
13.3.2 從記憶體擦除數據
13.4 註冊表安全
13.4.1 註冊表簡介
13.4.2 註冊表安全
13.5 數字水印
13.5.1 數字水印簡介
13.5.2 數字水印的實現
13.6 軟體著作權保護
小結
練習
第14章 數字簽名
14.1 數字簽名概述
14.1.1 數字簽名的套用
14.1.2 數字簽名的過程
14.2 實現數字簽名
14.2.1 用RSA實現數字簽名
14.2.2 用DSA實現數字簽名
14.3 利用數字簽名解決實際問題
14.3.1 解決篡改問題
14.3.2 解決抵賴問題
小結
練習
第15章 軟體安全測試
15.1 軟體測試概述
15.1.1 軟體測試的概念
15.1.2 軟體測試的目的和意義
15.1.3 軟體測試方法
15.2 針對軟體安全問題的測試
15.2.1 軟體安全測試的必要性
15.2.2 軟體安全測試的過程
15.3 安全審查
15.3.1 代碼的安全審查
15.3.2 配置複查
15.3.3 文檔的安全審查
小結
練習
參考文獻
第16章 程式性能調優
16.1 數據最佳化
16.1.1 最佳化變數賦值
16.1.2 最佳化字元串
16.1.3 選擇合適的數據結構
16.1.4 使用儘量小的數據類型
16.1.5 合理使用集合
16.2 算法最佳化
16.2.1 最佳化基本運算
16.2.2 最佳化流程
16.3 套用最佳化
16.3.1 最佳化異常處理
16.3.2 單例
16.3.3 享元
16.3.4 延遲載入
16.3.5 執行緒同步中的最佳化
16.4 資料庫的最佳化
16.4.1 設計上的最佳化
16.4.2 SQL語句最佳化
16.4.3 其他最佳化
小結
練習