軟件供應鏈安全 — 源代碼缺陷實例剖析

奇安信代码安全实验室

  • 出版商: 電子工業
  • 出版日期: 2021-08-01
  • 定價: $419
  • 售價: 8.5$356
  • 語言: 簡體中文
  • 頁數: 208
  • 裝訂: 平裝
  • ISBN: 7121416972
  • ISBN-13: 9787121416972
  • 相關分類: 資訊安全軟體工程
  • 立即出貨(限量) (庫存=3)

買這商品的人也買了...

商品描述

源代碼缺陷是指在軟件開發生命週期的編碼階段,產生的有意或者無意的缺陷。
為了便於讀者更好地了解各種缺陷的基本特性,本書根據缺陷產生的原因、
的結果以及表現形式等因素,將60種重要且常見缺陷分為3大類:
輸入驗證類、資源管理類和代碼質量類。
全書分為4章,第1章概述了源代碼缺陷的基本概念、發現缺陷的方法、自動化缺陷檢測技術、
缺陷處置流程、缺陷種類劃分、代碼審計工具、代碼安全保障技術趨勢;
第2章至第4章通過具體實例依次介紹了各類缺陷的原理、危害、在代碼中的表現形式及修復建議。
本書適合有一定計算機編碼基礎和網絡安全基礎的讀者閱讀,也適合作為網絡安全愛好者的參考書。

作者簡介

奇安信代碼安全實驗室專注於軟件源代碼安全分析技術和二進制漏洞挖掘技術的研究與開發。
基於多年的技術積累,奇安信代碼安全實驗室在國內率先推出了自主可控的軟件代碼安全分析系統
——奇安信代碼衛士和奇安信開源衛士。
奇安信代碼安全實驗室支撐漏洞平台的技術工作,多次向國家信息安全漏洞庫(CNNVD)
和國家信息安全漏洞共享平台(CNVD)報送原創通用型漏洞信息,並獲得表彰。
同時,還為微軟、谷歌、蘋果、華為等大型廠商和機構的軟件安全缺陷和漏洞發現提供服務與支撐,
並以期為更多用戶構建代碼安全保障體系,消除軟件代碼安全隱患

目錄大綱

第1章  概述 1
1.1  缺陷的基本概念 1
1.2  發現缺陷的方法 2
1.3  自動化缺陷檢測技術 4
1.4  缺陷處置流程 5
1.5  缺陷種類劃分 6
1.5.1  輸入驗證類 6
1.5.2  資源管理類 8
1.5.3  代碼質量類 10
1.6  代碼審計工具使用實例 11
1.6.1  任務配置頁面 11
1.6.2  檢測結果頁面 13
1.7  代碼安全保障技術趨勢前瞻 14
1.7.1  基於人工智能技術的代碼安全分析 14
1.7.2  面向安全的軟件代碼成分分析 15
1.7.3  面向DevSecOps的代碼安全測試 15
1.7.4  交互式應用安全測試 16

第2章  輸入驗證類缺陷分析 17
2.1  SQL注入 17
2.1.1  SQL注入的概念 17
2.1.2  SQL注入的危害 17
2.1.3  實例代碼 18
2.1.4  如何避免SQL注入 20
2.2  XML外部實體注入 20
2.2.1  XML外部實體注入的概念 20
2.2.2  XML外部實體注入的危害 21
2.2.3  實例代碼 21
2.2.4  如何避免XML外部實體注入 24
2.3  命令注入 24
2.3.1  命令注入的概念 24
2.3.2  命令注入的危害 25
2.3.3  實例代碼 26
2.3.4  如何避免命令注入 28
2.4  XPath注入 28
2.4.1  XPath注入的概念 28
2.4.2  XPath注入的危害 28
2.4.3  實例代碼 29
2.4.4  如何避免XPath注入 32
2.5  LDAP注入 32
2.5.1  LDAP注入的概念 32
2.5.2  LDAP注入的危害 33
2.5.3  實例代碼 33
2.5.4  如何避免LDAP注入 37
2.6  JSON注入 37
2.6.1  JSON注入的概念 37
2.6.2  JSON注入的危害 38
2.6.3  實例代碼 38
2.6.4  如何避免JSON注入 40
2.7  XQuery注入 40
2.7.1  XQuery注入的概念 40
2.7.2  XQuery注入的危害 40
2.7.3  實例代碼 41
2.7.4  如何避免XQuery注入 43
2.8  HTTP響應截斷 43
2.8.1  HTTP響應截斷的概念 43
2.8.2  HTTP響應截斷的危害 44
2.8.3  實例代碼 45
2.8.4  如何避免HTTP響應截斷 46
2.9  不安全的反序列化(XStream) 46
2.9.1  不安全的反序列化(XStream)的概念 46
2.9.2  不安全的反序列化(XStream)的危害 46
2.9.3  實例代碼 47
2.9.4  如何避免不安全的反序列化(XStream) 49
2.10  動態解析代碼 49
2.10.1  動態解析代碼的概念 49
2.10.2  動態解析代碼的危害 49
2.10.3  實例代碼 50
2.10.4  如何避免動態解析代碼 51
2.11  ContentProvider URI注入 52
2.11.1  ContentProvider URI 注入的概念 52
2.11.2  ContentProvider URI 注入的危害 52
2.11.3  實例代碼 52
2.11.4  如何避免ContentProvider URI 注入 54
2.12  反射型XSS 54
2.12.1  反射型XSS的概念 54
2.12.2  反射型XSS的危害 55
2.12.3  實例代碼 56
2.12.4  如何避免反射型XSS 57
2.13  存儲型XSS 58
2.13.1  存儲型XSS的概念 58
2.13.2  存儲型XSS的危害 58
2.13.3  實例代碼 59
2.13.4  如何避免存儲型XSS 61
2.14  弱驗證 62
2.14.1  弱驗證的概念 62
2.14.2  弱驗證的危害 62
2.14.3  實例代碼 63
2.14.4  如何避免弱驗證 65
2.15  組件間通信XSS 66
2.15.1  組件間通信XSS的概念 66
2.15.2  組件間通信XSS的危害 66
2.15.3  實例代碼 67
2.15.4  如何避免組件間通信XSS 68
2.16  進程控制 69
2.16.1  進程控制的概念 69
2.16.2  進程控制的危害 69
2.16.3  實例代碼 70
2.16.4  如何避免進程控制 72
2.17  路徑遍歷 72
2.17.1  路徑遍歷的概念 72
2.17.2  路徑遍歷的危害 72
2.17.3  實例代碼 73
2.17.4  如何避免路徑遍歷 75
2.18  重定向 76
2.18.1  重定向的概念 76
2.18.2  重定向的危害 76
2.18.3  實例代碼 77
2.18.4  如何避免重定向 79
2.19  日誌偽造 79
2.19.1  日誌偽造的概念 79
2.19.2  日誌偽造的危害 79
2.19.3  實例代碼 79
2.19.4  如何避免日誌偽造 81

第3章  資源管理類缺陷分析 82
3.1  緩衝區上溢 82
3.1.1  緩衝區上溢的概念 82
3.1.2  緩衝區上溢的危害 82
3.1.3  實例代碼 83
3.1.4  如何避免緩衝區上溢 85
3.2  緩衝區下溢 85
3.2.1  緩衝區下溢的概念 85
3.2.2  緩衝區下溢的危害 86
3.2.3  實例代碼 86
3.2.4  如何避免緩衝區下溢 88
3.3  越界訪問 88
3.3.1  越界訪問的概念 88
3.3.2  越界訪問的危害 88
3.3.3  實例代碼 89
3.3.4  如何避免越界訪問 90
3.4  釋放後使用 91
3.4.1  釋放後使用的概念 91
3.4.2  釋放後使用的危害 91
3.4.3  實例代碼 92
3.4.4  如何避免釋放後使用 93
3.5  二次釋放 94
3.5.1  二次釋放的概念 94
3.5.2  二次釋放的危害 94
3.5.3  實例代碼 95
3.5.4  如何避免二次釋放 96
3.6  內存洩漏 97
3.6.1  內存洩漏 97
3.6.2  內存洩漏的危害 97
3.6.3  實例代碼 98
3.6.4  如何避免內存洩漏 99
3.7  文件資源未釋放 99
3.7.1  文件資源未釋放的概念 99
3.7.2  文件資源未釋放的危害 99
3.7.3  實例代碼 100
3.7.4  如何避免文件資源未釋放 101
3.8  流資源未釋放 101
3.8.1  流資源未釋放的概念 101
3.8.2  流資源未釋放的危害 102
3.8.3  實例代碼 102
3.8.4  如何避免流資源未釋放 105
3.9  錯誤的資源關閉 105
3.9.1  錯誤的資源關閉的概念 105
3.9.2  錯誤的資源關閉的危害 106
3.9.3  實例代碼 106
3.9.4  如何避免錯誤的資源關閉 107
3.10  重複加鎖 107
3.10.1  重複加鎖的概念 107
3.10.2  重複加鎖的危害 108
3.10.3  實例代碼 108
3.10.4  如何避免重複加鎖 109
3.11  錯誤的內存釋放對象 110
3.11.1  錯誤的內存釋放對象的概念 110
3.11.2  錯誤的內存釋放對象的危害 110
3.11.3  實例代碼 111
3.11.4  如何避免錯誤的內存釋放對象 112
3.12  錯誤的內存釋放方法 113
3.12.1  錯誤的內存釋放方法的概念 113
3.12.2  錯誤的內存釋放方法的危害 113
3.12.3  實例代碼 114
3.12.4  如何避免錯誤的內存釋放方法 115
3.13  返回棧地址 115
3.13.1  返回棧地址的概念 115
3.13.2  返回棧地址的危害 115
3.13.3  實例代碼 116
3.13.4  如何避免返回棧地址 117
3.14  被污染的內存分配 117
3.14.1  被污染的內存分配的概念 117
3.14.2  被污染的內存分配的危害 118
3.14.3  實例代碼 118
3.14.4  如何避免被污染的內存分配 121
3.15  數據庫訪問控制 122
3.15.1  數據庫訪問控制的概念 122
3.15.2  數據庫訪問控制的危害 122
3.15.3  實例代碼 122
3.15.4  如何避免數據庫訪問控制 124
3.16  硬編碼密碼 125
3.16.1  硬編碼密碼的概念 125
3.16.2  硬編碼密碼的危害 125
3.16.3  實例代碼 126
3.16.4  如何避免硬編碼密碼 128
3.17  不安全的隨機數 128
3.17.1  不安全的隨機數的概念 128
3.17.2  不安全的隨機數的危害 129
3.17.3  實例代碼 129
3.17.4  如何避免不安全的隨機數 131
3.18  不安全的哈希算法 131
3.18.1  不安全的哈希算法的概念 131
3.18.2  不安全的哈希算法的危害 132
3.18.3  實例代碼 132
3.18.4  如何避免不安全的哈希算法 135
3.19  弱加密 135
3.19.1  弱加密的概念 135
3.19.2  弱加密的危害 135
3.19.3  實例代碼 136
3.19.4  如何避免弱加密 138
3.20  硬編碼加密密鑰 139
3.20.1  硬編碼加密密鑰的概念 139
3.20.2  硬編碼加密密鑰的危害 139
3.20.3  實例代碼 139
3.20.4  如何避免硬編碼加密密鑰 140

第4章  代碼質量類缺陷分析 141
4.1  有符號整數溢出 141
4.1.1  有符號整數溢出的概念 141
4.1.2  有符號整數溢出的危害 141
4.1.3  實例代碼 142
4.1.4  如何避免有符號整數溢出 143
4.2  無符號整數迴繞 144
4.2.1  無符號整數迴繞的概念 144
4.2.2  無符號整數迴繞的危害 144
4.2.3  實例代碼 145
4.2.4  如何避免無符號整數迴繞 146
4.3  空指針解引用 147
4.3.1  空指針解引用的概念 147
4.3.2  空指針解引用的危害 147
4.3.3  實例代碼 148
4.3.4  如何避免空指針解引用 149
4.4  解引用未初始化的指針 149
4.4.1  解引用未初始化的指針的概念 149
4.4.2  解引用未初始化的指針的危害 149
4.4.3  實例代碼 150
4.4.4  如何避免解引用未初始化的指針 151
4.5  除數為零 151
4.5.1  除數為零的概念 151
4.5.2  除數為零的危害 152
4.5.3  實例代碼 152
4.5.4  如何避免除數為零 154
4.6  在scanf()函數中沒有對%s格式符進行寬度限制 154
4.6.1  在scanf()函數中沒有對%s格式符進行寬度限制的概念 154
4.6.2  在scanf()函數中沒有對%s格式符進行寬度限制的危害 154
4.6.3  實例代碼 155
4.6.4  如何避免在scanf()函數中沒有對%s格式符進行寬度限制 156
4.7  被污染的格式化字符串 157
4.7.1  被污染的格式化字符串的概念 157
4.7.2  被污染的格式化字符串的危害 157
4.7.3  實例代碼 158
4.7.4  如何避免被污染的格式化字符串 160
4.8  不當的循環終止 160
4.8.1  不當的循環終止的概念 160
4.8.2  不當的循環終止的危害 160
4.8.3  實例代碼 160
4.8.4  如何避免不當的循環終止 162
4.9  雙重檢查鎖定 162
4.9.1  雙重檢查鎖定的概念 162
4.9.2  雙重檢查鎖定的危害 162
4.9.3  實例代碼 162
4.9.4  如何避免雙重檢查鎖定 165
4.10  未初始化值用於賦值操作 165
4.10.1  未初始化值用於賦值操作的概念 165
4.10.2  未初始化值用於賦值操作的危害 165
4.10.3  實例代碼 166
4.10.4  如何避免未初始化值用於賦值操作 167
4.11  參數未初始化 167
4.11.1  參數未初始化的概念 167
4.11.2  參數未初始化的危害 168
4.11.3  實例代碼 168
4.11.4  如何避免參數未初始化 169
4.12  返回值未初始化 169
4.12.1  返回值未初始化的概念 169
4.12.2  返回值未初始化的危害 169
4.12.3  實例代碼 170
4.12.4  如何避免返回值未初始化 170
4.13  Cookie:未經過SSL加密 171
4.13.1  Cookie:未經過SSL加密的概念 171
4.13.2  Cookie:未經過SSL加密的危害 171
4.13.3  實例代碼 172
4.13.4  如何避免Cookie:未經過SSL加密 174
4.14  郵件服務器建立未加密的連接 174
4.14.1  郵件服務器建立未加密的連接的概念 174
4.14.2  郵件服務器建立未加密的連接的危害 174
4.14.3  實例代碼 175
4.14.4  如何避免郵件服務器建立未加密的連接 176
4.15  不安全的SSL:過於廣泛的信任證書 176
4.15.1  不安全的SSL:過於廣泛的信任證書的概念 176
4.15.2  不安全的SSL:過於廣泛的信任證書的危害 177
4.15.3  實例代碼 177
4.15.4  如何避免不安全的SSL:過於廣泛的信任證書 179
4.16  Spring Boot配置錯誤:不安全的Actuator 179
4.16.1  Spring Boot配置錯誤:不安全的Actuator的概念 179
4.16.2  Spring Boot配置錯誤:不安全的Actuator的危害 179
4.16.3  實例代碼 180
4.16.4  如何避免Spring Boot配置錯誤:不安全的Actuator 180
4.17  未使用的局部變量 181
4.17.1  未使用的局部變量的概念 181
4.17.2  未使用的局部變量的危害 181
4.17.3  實例代碼 181
4.17.4  如何避免未使用的局部變量 182
4.18  死代碼 182
4.18.1  死代碼的概念 182
4.18.2  死代碼的危害 183
4.18.3  實例代碼 183
4.18.4  如何避免死代碼 184
4.19  函數調用時參數不匹配 184
4.19.1  函數調用時參數不匹配的概念 184
4.19.2  函數調用時參數不匹配的危害 184
4.19.3  實例代碼 184
4.19.4  如何避免函數調用時參數不匹配 186
4.20  不當的函數地址使用 186
4.20.1  不當的函數地址使用的概念 186
4.20.2  不當的函數地址使用的危害 186
4.20.3  實例代碼 186
4.20.4  如何避免不當的函數地址使用 188
4.21  忽略返回值 188
4.21.1  忽略返回值的概念 188
4.21.2  忽略返回值的危害 188
4.21.3  實例代碼 189
4.21.4  如何避免忽略返回值 190