軟體供應鏈原始碼缺陷實例剖析

軟體供應鏈原始碼缺陷實例剖析

《軟體供應鏈原始碼缺陷實例剖析》是2021年電子工業出版社出版的圖書,作者是奇安信代碼安全實驗室。

基本介紹

  • 中文名:軟體供應鏈原始碼缺陷實例剖析
  • 作者:奇安信代碼安全實驗室
  • 出版時間:2021年
  • 出版社:電子工業出版社
  • 頁數:208 頁
  • ISBN:9787121416972
  • 定價:69.8 元 
  • 開本:128 開
內容簡介,作者簡介,目 錄,

內容簡介

原始碼缺陷是指在軟體開發生命周期的編碼階段,產生的有意或者無意的缺陷。為了便於讀者更好地了解各種缺陷的基本特性,本書根據缺陷產生的原因、造成的結果以及表現形式等因素,將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

相關詞條

熱門詞條

聯絡我們