軟件供應(yīng)鏈安全——源代碼缺陷實(shí)例剖析
定 價:69.8 元
- 作者:奇安信代碼安全實(shí)驗(yàn)室
- 出版時間:2021/8/1
- ISBN:9787121416972
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP311.52
- 頁碼:208
- 紙張:
- 版次:01
- 開本:16開
源代碼缺陷是指在軟件開發(fā)生命周期的編碼階段,產(chǎn)生的有意或者無意的缺陷。為了便于讀者更好地了解各種缺陷的基本特性,本書根據(jù)缺陷產(chǎn)生的原因、造成的結(jié)果以及表現(xiàn)形式等因素,將60種重要且常見缺陷分為3大類:輸入驗(yàn)證類、資源管理類和代碼質(zhì)量類。全書分為4章,第1章概述了源代碼缺陷的基本概念、發(fā)現(xiàn)缺陷的方法、自動化缺陷檢測技術(shù)、缺陷處置流程、缺陷種類劃分、代碼審計(jì)工具、代碼安全保障技術(shù)趨勢;第2章至第4章通過具體實(shí)例依次介紹了各類缺陷的原理、危害、在代碼中的表現(xiàn)形式及修復(fù)建議。本書適合有一定計(jì)算機(jī)編碼基礎(chǔ)和網(wǎng)絡(luò)安全基礎(chǔ)的讀者閱讀,也適合作為網(wǎng)絡(luò)安全愛好者的參考書。
奇安信代碼安全實(shí)驗(yàn)室專注于軟件源代碼安全分析技術(shù)和二進(jìn)制漏洞挖掘技術(shù)的研究與開發(fā);诙嗄甑募夹g(shù)積累,奇安信代碼安全實(shí)驗(yàn)室在國內(nèi)率先推出了自主可控的軟件代碼安全分析系統(tǒng)——奇安信代碼衛(wèi)士和奇安信開源衛(wèi)士。奇安信代碼安全實(shí)驗(yàn)室支撐國家級漏洞平臺的技術(shù)工作,多次向國家信息安全漏洞庫(CNNVD)和國家信息安全漏洞共享平臺(CNVD)報送原創(chuàng)通用型漏洞信息,并獲得表彰。同時,還為微軟、谷歌、蘋果、華為等大型廠商和機(jī)構(gòu)的軟件安全缺陷和漏洞發(fā)現(xiàn)提供服務(wù)與支撐,并以期為更多用戶構(gòu)建代碼安全保障體系,消除軟件代碼安全隱患。
目錄
第1章 概述 1
1.1 缺陷的基本概念 1
1.2 發(fā)現(xiàn)缺陷的方法 2
1.3 自動化缺陷檢測技術(shù) 4
1.4 缺陷處置流程 5
1.5 缺陷種類劃分 6
1.5.1 輸入驗(yàn)證類 6
1.5.2 資源管理類 8
1.5.3 代碼質(zhì)量類 10
1.6 代碼審計(jì)工具使用實(shí)例 11
1.6.1 任務(wù)配置頁面 11
1.6.2 檢測結(jié)果頁面 13
1.7 代碼安全保障技術(shù)趨勢前瞻 14
1.7.1 基于人工智能技術(shù)的代碼安全分析 14
1.7.2 面向安全的軟件代碼成分分析 15
1.7.3 面向DevSecOps的代碼安全測試 15
1.7.4 交互式應(yīng)用安全測試 16
第2章 輸入驗(yàn)證類缺陷分析 17
2.1 SQL注入 17
2.1.1 SQL注入的概念 17
2.1.2 SQL注入的危害 17
2.1.3 實(shí)例代碼 18
2.1.4 如何避免SQL注入 20
2.2 XML外部實(shí)體注入 20
2.2.1 XML外部實(shí)體注入的概念 20
2.2.2 XML外部實(shí)體注入的危害 21
2.2.3 實(shí)例代碼 21
2.2.4 如何避免XML外部實(shí)體注入 24
2.3 命令注入 24
2.3.1 命令注入的概念 24
2.3.2 命令注入的危害 25
2.3.3 實(shí)例代碼 26
2.3.4 如何避免命令注入 28
2.4 XPath注入 28
2.4.1 XPath注入的概念 28
2.4.2 XPath注入的危害 28
2.4.3 實(shí)例代碼 29
2.4.4 如何避免XPath注入 32
2.5 LDAP注入 32
2.5.1 LDAP注入的概念 32
2.5.2 LDAP注入的危害 33
2.5.3 實(shí)例代碼 33
2.5.4 如何避免LDAP注入 37
2.6 JSON注入 37
2.6.1 JSON注入的概念 37
2.6.2 JSON注入的危害 38
2.6.3 實(shí)例代碼 38
2.6.4 如何避免JSON注入 40
2.7 XQuery注入 40
2.7.1 XQuery注入的概念 40
2.7.2 XQuery注入的危害 40
2.7.3 實(shí)例代碼 41
2.7.4 如何避免XQuery注入 43
2.8 HTTP響應(yīng)截斷 43
2.8.1 HTTP響應(yīng)截斷的概念 43
2.8.2 HTTP響應(yīng)截斷的危害 44
2.8.3 實(shí)例代碼 45
2.8.4 如何避免HTTP響應(yīng)截斷 46
2.9 不安全的反序列化(XStream) 46
2.9.1 不安全的反序列化(XStream)的概念 46
2.9.2 不安全的反序列化(XStream)的危害 46
2.9.3 實(shí)例代碼 47
2.9.4 如何避免不安全的反序列化(XStream) 49
2.10 動態(tài)解析代碼 49
2.10.1 動態(tài)解析代碼的概念 49
2.10.2 動態(tài)解析代碼的危害 49
2.10.3 實(shí)例代碼 50
2.10.4 如何避免動態(tài)解析代碼 51
2.11 ContentProvider URI注入 52
2.11.1 ContentProvider URI 注入的概念 52
2.11.2 ContentProvider URI 注入的危害 52
2.11.3 實(shí)例代碼 52
2.11.4 如何避免ContentProvider URI 注入 54
2.12 反射型XSS 54
2.12.1 反射型XSS的概念 54
2.12.2 反射型XSS的危害 55
2.12.3 實(shí)例代碼 56
2.12.4 如何避免反射型XSS 57
2.13 存儲型XSS 58
2.13.1 存儲型XSS的概念 58
2.13.2 存儲型XSS的危害 58
2.13.3 實(shí)例代碼 59
2.13.4 如何避免存儲型XSS 61
2.14 弱驗(yàn)證 62
2.14.1 弱驗(yàn)證的概念 62
2.14.2 弱驗(yàn)證的危害 62
2.14.3 實(shí)例代碼 63
2.14.4 如何避免弱驗(yàn)證 65
2.15 組件間通信XSS 66
2.15.1 組件間通信XSS的概念 66
2.15.2 組件間通信XSS的危害 66
2.15.3 實(shí)例代碼 67
2.15.4 如何避免組件間通信XSS 68
2.16 進(jìn)程控制 69
2.16.1 進(jìn)程控制的概念 69
2.16.2 進(jìn)程控制的危害 69
2.16.3 實(shí)例代碼 70
2.16.4 如何避免進(jìn)程控制 72
2.17 路徑遍歷 72
2.17.1 路徑遍歷的概念 72
2.17.2 路徑遍歷的危害 72
2.17.3 實(shí)例代碼 73
2.17.4 如何避免路徑遍歷 75
2.18 重定向 76
2.18.1 重定向的概念 76
2.18.2 重定向的危害 76
2.18.3 實(shí)例代碼 77
2.18.4 如何避免重定向 79
2.19 日志偽造 79
2.19.1 日志偽造的概念 79
2.19.2 日志偽造的危害 79
2.19.3 實(shí)例代碼 79
2.19.4 如何避免日志偽造 81
第3章 資源管理類缺陷分析 82
3.1 緩沖區(qū)上溢 82
3.1.1 緩沖區(qū)上溢的概念 82
3.1.2 緩沖區(qū)上溢的危害 82
3.1.3 實(shí)例代碼 83
3.1.4 如何避免緩沖區(qū)上溢 85
3.2 緩沖區(qū)下溢 85
3.2.1 緩沖區(qū)下溢的概念 85
3.2.2 緩沖區(qū)下溢的危害 86
3.2.3 實(shí)例代碼 86
3.2.4 如何避免緩沖區(qū)下溢 88
3.3 越界訪問 88
3.3.1 越界訪問的概念 88
3.3.2 越界訪問的危害 88
3.3.3 實(shí)例代碼 89
3.3.4 如何避免越界訪問 90
3.4 釋放后使用 91
3.4.1 釋放后使用的概念 91
3.4.2 釋放后使用的危害 91
3.4.3 實(shí)例代碼 92
3.4.4 如何避免釋放后使用 93
3.5 二次釋放 94
3.5.1 二次釋放的概念 94
3.5.2 二次釋放的危害 94
3.5.3 實(shí)例代碼 95
3.5.4 如何避免二次釋放 96
3.6 內(nèi)存泄漏 97
3.6.1 內(nèi)存泄漏的概念 97
3.6.2 內(nèi)存泄漏的危害 97
3.6.3 實(shí)例代碼 98
3.6.4 如何避免內(nèi)存泄漏 99
3.7 文件資源未釋放 99
3.7.1 文件資源未釋放的概念 99
3.7.2 文件資源未釋放的危害 99
3.7.3 實(shí)例代碼 100
3.7.4 如何避免文件資源未釋放 101
3.8 流資源未釋放 101
3.8.1 流資源未釋放的概念 101
3.8.2 流資源未釋放的危害 102
3.8.3 實(shí)例代碼 102
3.8.4 如何避免流資源未釋放 105
3.9 錯誤的資源關(guān)閉 105
3.9.1 錯誤的資源關(guān)閉的概念 105
3.9.2 錯誤的資源關(guān)閉的危害 106
3.9.3 實(shí)例代碼 106
3.9.4 如何避免錯誤的資源關(guān)閉 107
3.10 重復(fù)加鎖 107
3.10.1 重復(fù)加鎖的概念 107
3.10.2 重復(fù)加鎖的危害 108
3.10.3 實(shí)例代碼 108
3.10.4 如何避免重復(fù)加鎖 109
3.11 錯誤的內(nèi)存釋放對象 110
3.11.1 錯誤的內(nèi)存釋放對象的概念 110
3.11.2 錯誤的內(nèi)存釋放對象的危害 110
3.11.3 實(shí)例代碼 111
3.11.4 如何避免錯誤的內(nèi)存釋放對象 112
3.12 錯誤的內(nèi)存釋放方法 113
3.12.1 錯誤的內(nèi)存釋放方法的概念 113
3.12.2 錯誤的內(nèi)存釋放方法的危害 113
3.12.3 實(shí)例代碼 114
3.12.4 如何避免錯誤的內(nèi)存釋放方法 115
3.13 返回棧地址 115
3.13.1 返回棧地址的概念 115
3.13.2 返回棧地址的危害 115
3.13.3 實(shí)例代碼 116
3.13.4 如何避免返回棧地址 117
3.14 被污染的內(nèi)存分配 117
3.14.1 被污染的內(nèi)存分配的概念 117
3.14.2 被污染的內(nèi)存分配的危害 118
3.14.3 實(shí)例代碼 118
3.14.4 如何避免被污染的內(nèi)存分配 121
3.15 數(shù)據(jù)庫訪問控制 122
3.15.1 數(shù)據(jù)庫訪問控制的概念 122
3.15.2 數(shù)據(jù)庫訪問控制的危害 122
3.15.3 實(shí)例代碼 122
3.15.4 如何避免數(shù)據(jù)庫訪問控制 124
3.16 硬編碼密碼 125
3.16.1 硬編碼密碼的概念 125
3.16.2 硬編碼密碼的危害 125
3.16.3 實(shí)例代碼 126
3.16.4 如何避免硬編碼密碼 128
3.17 不安全的隨機(jī)數(shù) 128
3.17.1 不安全的隨機(jī)數(shù)的概念 128
3.17.2 不安全的隨機(jī)數(shù)的危害 129
3.17.3 實(shí)例代碼 129
3.17.4 如何避免不安全的隨機(jī)數(shù) 131
3.18 不安全的哈希算法 131
3.18.1 不安全的哈希算法的概念 131
3.18.2 不安全的哈希算法的危害 132
3.18.3 實(shí)例代碼 132
3.18.4 如何避免不安全的哈希算法 135
3.19 弱加密 135
3.19.1 弱加密的概念 135
3.19.2 弱加密的危害 135
3.19.3 實(shí)例代碼 136
3.19.4 如何避免弱加密 138
3.20 硬編碼加密密鑰 139
3.20.1 硬編碼加密密鑰的概念 139
3.20.2 硬編碼加密密鑰的危害 139
3.20.3 實(shí)例代碼 139
3.20.4 如何避免硬編碼加密密鑰 140
第4章 代碼質(zhì)量類缺陷分析 141
4.1 有符號整數(shù)溢出 141
4.1.1 有符號整數(shù)溢出的概念 141
4.1.2 有符號整數(shù)溢出的危害 141
4.1.3 實(shí)例代碼 142
4.1.4 如何避免有符號整數(shù)溢出 143
4.2 無符號整數(shù)回繞 144
4.2.1 無符號整數(shù)回繞的概念 144
4.2.2 無符號整數(shù)回繞的危害 144
4.2.3 實(shí)例代碼 145
4.2.4 如何避免無符號整數(shù)回繞 146
4.3 空指針解引用 147
4.3.1 空指針解引用的概念 147
4.3.2 空指針解引用的危害 147
4.3.3 實(shí)例代碼 148
4.3.4 如何避免空指針解引用 149
4.4 解引用未初始化的指針 149
4.4.1 解引用未初始化的指針的概念 149
4.4.2 解引用未初始化的指針的危害 149
4.4.3 實(shí)例代碼 150
4.4.4 如何避免解引用未初始化的指針 151
4.5 除數(shù)為零 151
4.5.1 除數(shù)為零的概念 151
4.5.2 除數(shù)為零的危害 152
4.5.3 實(shí)例代碼 152
4.5.4 如何避免除數(shù)為零 154
4.6 在scanf()函數(shù)中沒有對%s格式符進(jìn)行寬度限制 154
4.6.1 在scanf()函數(shù)中沒有對%s格式符進(jìn)行寬度限制的概念 154
4.6.2 在scanf()函數(shù)中沒有對%s格式符進(jìn)行寬度限制的危害 154
4.6.3 實(shí)例代碼 155
4.6.4 如何避免在scanf()函數(shù)中沒有對%s格式符進(jìn)行寬度限制 156
4.7 被污染的格式化字符串 157
4.7.1 被污染的格式化字符串的概念 157
4.7.2 被污染的格式化字符串的危害 157
4.7.3 實(shí)例代碼 158
4.7.4 如何避免被污染的格式化字符串 160
4.8 不當(dāng)?shù)难h(huán)終止 160
4.8.1 不當(dāng)?shù)难h(huán)終止的概念 160
4.8.2 不當(dāng)?shù)难h(huán)終止的危害 160
4.8.3 實(shí)例代碼 160
4.8.4 如何避免不當(dāng)?shù)难h(huán)終止 162
4.9 雙重檢查鎖定 162
4.9.1 雙重檢查鎖定的概念 162
4.9.2 雙重檢查鎖定的危害 162
4.9.3 實(shí)例代碼 162
4.9.4 如何避免雙重檢查鎖定 165
4.10 未初始化值用于賦值操作 165
4.10.1 未初始化值用于賦值操作的概念 165
4.10.2 未初始化值用于賦值操作的危害 165
4.10.3 實(shí)例代碼 166
4.10.4 如何避免未初始化值用于賦值操作 167
4.11 參數(shù)未初始化 167
4.11.1 參數(shù)未初始化的概念 167
4.11.2 參數(shù)未初始化的危害 168
4.11.3 實(shí)例代碼 168
4.11.4 如何避免參數(shù)未初始化 169
4.12 返回值未初始化 169
4.12.1 返回值未初始化的概念 169
4.12.2 返回值未初始化的危害 169
4.12.3 實(shí)例代碼 170
4.12.4 如何避免返回值未初始化 170
4.13 Cookie:未經(jīng)過SSL加密 171
4.13.1 Cookie:未經(jīng)過SSL加密的概念 171
4.13.2 Cookie:未經(jīng)過SSL加密的危害 171
4.13.3 實(shí)例代碼 172
4.13.4 如何避免Cookie:未經(jīng)過SSL加密 174
4.14 郵件服務(wù)器建立未加密的連接 174
4.14.1 郵件服務(wù)器建立未加密的連接的概念 174
4.14.2 郵件服務(wù)器建立未加密的連接的危害 174
4.14.3 實(shí)例代碼 175
4.14.4 如何避免郵件服務(wù)器建立未加密的連接 176
4.15 不安全的SSL:過于廣泛的信任證書 176
4.15.1 不安全的SSL:過于廣泛的信任證書的概念 176
4.15.2 不安全的SSL:過于廣泛的信任證書的危害 177
4.15.3 實(shí)例代碼 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 實(shí)例代碼 180
4.16.4 如何避免Spring Boot配置錯誤:不安全的Actuator 180
4.17 未使用的局部變量 181
4.17.1 未使用的局部變量的概念 181
4.17.2 未使用的局部變量的危害 181
4.17.3 實(shí)例代碼 181
4.17.4 如何避免未使用的局部變量 182
4.18 死代碼 182
4.18.1 死代碼的概念 182
4.18.2 死代碼的危害 183
4.18.3 實(shí)例代碼 183
4.18.4 如何避免死代碼 184
4.19 函數(shù)調(diào)用時參數(shù)不匹配 184
4.19.1 函數(shù)調(diào)用時參數(shù)不匹配的概念 184
4.19.2 函數(shù)調(diào)用時參數(shù)不匹配的危害 184
4.19.3 實(shí)例代碼 184
4.19.4 如何避免函數(shù)調(diào)用時參數(shù)不匹配 186
4.20 不當(dāng)?shù)暮瘮?shù)地址使用 186
4.20.1 不當(dāng)?shù)暮瘮?shù)地址使用的概念 186
4.20.2 不當(dāng)?shù)暮瘮?shù)地址使用的危害 186
4.20.3 實(shí)例代碼 186
4.20.4 如何避免不當(dāng)?shù)暮瘮?shù)地址使用 188
4.21 忽略返回值 188
4.21.1 忽略返回值的概念 188
4.21.2 忽略返回值的危害 188
4.21.3 實(shí)例代碼 189
4.21.4 如何避免忽略返回值 190