![编写安全的代码 第2版](https://cover.qianqiantushu.cc/33/s6916de2.jpg)
![编写安全的代码 第2版](https://cover.qianqiantushu.cc/33/s6916de2.jpg)
编写安全的代码 第2版PDF电子书下载
- 电子书积分:15 积分如何计算积分?
- 作 者:(美)Michael Howard,(美)David LeBlanc著;程永敬等译
- 出 版 社:北京:机械工业出版社
- 出版年份:2005
- ISBN:7111112105
- 页数:480 页
第一部分 现代安全 2
第1章 对安全系统的需求 2
1.1“疯狂的Web网”上的应用程序 3
1.2可信计算的需要 4
1.3让每个人都参与进来 5
1.3.1巧妙地向企业推销安全 5
1.3.2使用搞破坏的方法 7
1.4灌输安全意识的一些主意 8
1.4.1让老板发一封电子邮件 9
1.4.2任命安全宣传员 9
1.5攻击者的优势和防御者的劣势 12
1.5.1因素1:防御者必须对所有的环节都进行防御,而攻击者可以选择最薄弱的环节 12
1.6本章小结 13
1.5.4因素4:防御者的活动必须遵循相应的规则,而攻击者则可以采用一些卑鄙的手段 13
1.5.3因素3:防御者必须永远保持警惕,而攻击者却可以随意“罢工” 13
1.5.2因素2:防御者只能针对已知的攻击进行防御,而攻击者则可以探测未知的漏洞 13
第2章 主动的安全开发过程 14
2.1不断改进开发过程 15
2.2安全教育的角色 15
2.2.1强制培训的阻力 17
2.2.2不断更新的培训 18
2.2.3安全科学的进步 18
2.2.4教育证明“更多的眼睛”不代表更安全 18
2.2.5有力的证据! 19
2.3设计阶段 19
2.3.1面试期间的安全问题 19
2.3.2定义产品的安全目标 20
2.3.3安全是产品的一种特性 22
2.3.7设置bug门槛 24
2.3.6终结不安全的特性 24
2.3.5安全的设计源于威胁建模 24
2.3.4要有足够的时间考虑安全问题 24
2.3.8安全小组审查 25
2.4开发阶段 25
2.4.1只有核心成员能够查看新代码(签字确认) 25
2.4.2新代码的同级安全审查(签字确认) 25
2.4.3定义安全的编码准则 26
2.4.4审查旧的缺陷 26
2.4.5外部安全审查 26
2.4.6安全推动活动 26
2.4.7留心自己的错误数量 27
2.4.8记录错误 27
2.4.9没有惊喜,也没有圣诞节彩蛋! 27
2.6.2响应过程 28
2.6.1如何知道已完成 28
2.6发行和维护阶段 28
2.5测试阶段 28
2.6.3责任制 29
2.7本章小结 29
第3章 赖以生存的安全法则 30
3.1设计安全、默认安全和部署安全 30
3.1.1设计安全 30
3.2安全法则 31
3.1.3部署安全 31
3.1.2默认安全 31
3.2.1从错误中吸取教训 32
3.2.2尽可能缩小攻击面 33
3.2.3采用安全的默认设置 34
3.2.4纵深防御 35
3.2.5使用最小特权 36
3.2.6向下兼容总是不安全的 37
3.2.9失败时进入安全模式 38
3.2.8失败时的应对计划 38
3.2.7假设外部系统是不安全的 38
3.2.10切记:安全特性不等于安全的特性 40
3.2.11决不要将安全仅维系于隐匿 40
3.2.12不要将代码与数据混在一起 40
3.2.13正确地解决安全问题 40
3.3本章小结 41
第4章 威胁建模 42
4.1通过威胁建模进行安全的设计 42
4.1.1成立威胁建模小组 43
4.1.2分解应用程序 44
4.1.3确定系统所面临的威胁 49
4.1.4以风险递减的顺序给威胁分级 54
4.1.5选择应付威胁的方法 63
4.2安全技术 64
4.2.1身份认证 64
4.1.6选择缓和威胁的方法 64
4.2.2授权 68
4.2.3防篡改和增强保密性的技术 69
4.2.4保护秘密或最好不要保存秘密 69
4.2.5加密、散列、MAC和数字签名 69
4.2.6审核 70
4.2.7过滤、节流和服务质量 70
4.2.8最小特权 70
4.3缓和工资表范例程序的威胁 71
4.4各种威胁及解决方案 71
4.5本章小结 71
第二部分 安全的编码技术 76
第5章 头号公敌:缓冲区溢出 76
5.1堆栈溢出 77
5.2堆溢出 83
5.3数组下标错误 87
5.4格式字符串错误 89
5.5Unicode和ANSI缓冲区大小不匹配 93
5.6预防缓冲区溢出 95
5.6.1字符串处理方面的安全问题 96
5.6.2关于字符串处理函数的警告 103
5.7VisualC++.NET的/GS选项 104
5.8本章小结 106
第6章 确定适当的访问控制 107
6.1ACL何以如此重要 107
6.2ACL的组成 109
6.3选择好的ACL的方法 111
6.4创建ACL 113
6.4.1在WindowsNT4中创建ACL 113
6.4.2在Windows2000中创建ACL 116
6.4.3用活动模板库创建ACL 119
6.5对ACE进行正确的排序 120
6.6留意终端服务器和远程桌面的SID 122
6.7NULLDACL和其他的危险ACE类型 123
6.7.1NULLDACL和审核 124
6.7.2危险的ACE类型 124
6.7.3如果无法改变NULLDACL该怎么办 125
6.8其他的访问控制机制 125
6.8.1.NET框架角色 126
6.8.2COM+角色 127
6.8.3IP限制 127
6.8.4SQLServer触发器和权限 128
6.8.5一个医学方面的示例 128
6.8.6关于访问控制机制的重要说明 129
6.9本章小结 130
第7章 以最小特权运行 131
7.1现实中的最小特权 131
7.1.2破坏Web服务器 132
7.1.1病毒和特洛伊木马 132
7.3特权简介 133
7.2访问控制简介 133
7.3.1SeBackupPrivilege问题 134
7.3.2SeRestorePrivilege问题 136
7.3.3SeDebugPrivilege问题 136
7.3.4SeTcbPrivilege问题 136
7.3.5SeAssignPrimaryTokenPrivilege和SelncreaseQuotaPrivilege问题 137
7.3.6SeLoadDriverPrivilege问题 137
7.3.7SeRemoteShutdownPrivilege问题 137
7.3.8SeTakeOwnershipPrivilege问题 137
7.4令牌简介 137
7.5令牌、特权、SID、ACL和进程之间的关系 138
7.6应用程序要求提高特权的三个理由 139
7.6.1ACL问题 139
7.7解决提高特权的问题 140
7.7.1解决ACL问题 140
7.6.2特权问题 140
7.6.3使用LSA秘密 140
7.7.2解决特权问题 141
7.7.3解决LSA问题 141
7.8确定适当特权的过程 141
7.8.1步骤1:找到应用程序使用的资源 141
7.8.2步骤2:找到应用程序使用的特权API 142
7.8.3步骤3:哪一个帐户是必需的 142
7.8.4步骤4:获取令牌的内容 143
7.8.5步骤5:所有SID和特权是否都是必需的 147
7.8.6步骤6:调整令牌 148
7.9WindowsXP和WindowsServer2003中的低特权级服务帐户 158
7.10模拟特权和WindowsServer2003 159
7.11.2如何判断应用程序失败的原因 160
7.11.1为什么以普通用户运行时应用程序失败 160
7.11调试最小特权问题 160
7.12本章小结 165
第8章 加密的弱点 166
8.1使用不良的随机数 166
8.1.1问题:rand函数 166
8.1.2Win32中的加密随机数 168
8.1.3托管代码中的加密随机数 172
8.1.4Web页中的加密随机数 172
8.2使用口令生成加密密钥 173
8.3密钥管理问题 174
8.3.1长期密钥和短期密钥 175
8.3.2使用合适的密钥长度保护数据 176
8.3.3将密钥保存在靠近数据源的地方 176
8.3.4密钥交换问题 179
8.4创建自己的加密函数 180
8.5使用相同的流密码加密密钥 181
8.5.1人们为什么使用流密码 182
8.5.2流密码的缺陷 182
8.5.3如果必须使用相同的密钥怎么办 184
8.6针对流密码的位替换攻击 185
8.6.1解决位替换攻击 185
8.6.2何时使用散列、密钥散列或数字签名 186
8.7重用明文和密文的缓冲区 190
8.8使用加密技术缓和威胁 191
8.9在文档中说明你使用的加密算法 191
8.10本章小结 191
第9章 保护机密数据 192
9.1攻击机密数据 192
9.2有时并不需要保存秘密 193
9.2.1创建干扰散列 193
9.2.2使用PKCS#5增加攻击的难度 194
9.3获取用户的秘密信息 195
9.4保护Windows2000及其以后版本中的秘密信息 196
9.5保护WindowsNT4中的秘密信息 199
9.6保护Windows95/98/ME/CE中的秘密 202
9.7不要选择最低共同点解决方案 205
9.8管理内存中的秘密 206
9.8.1编译器优化警告 207
9.8.2对内存中的机密数据进行加密 210
9.9锁定内存以防敏感数据被分页 211
9.10保护托管代码中的机密数据 211
9.11提高安全门槛 217
9.11.1把数据存储在FAT系统的文件中 217
9.11.2使用嵌入密钥和XOR对数据进行编码 217
9.11.6使用3DES加密数据,把强密钥存储在注册表中,并使用ACL控制文件和注册表项 218
9.12保护机密数据时的折衷方案 218
9.11.7使用3DES加密数据,把强密钥存储在注册表中,要求用户输入密码,并使用ACL控制文件和注册表项 218
9.11.4使用3DES加密数据并把密码存放在注册表中 218
9.11.5使用3DES加密数据并把强密钥存储在注册表中 218
9.11.3使用嵌入密钥和3DES加密数据 218
9.13本章小结 219
第10章 一切输入都是有害的 220
10.1问题 220
10.2误信他人 221
10.3防御输入攻击的策略 222
10.4如何检查合法性 223
10.5Perl中被污染的变量 225
10.6使用正则表达式检查输入 225
10.7正则表达式和Unicode 228
10.8.1Perl中的正则表达式 231
10.8.2托管代码中的正则表达式 231
10.8正则表达式的“罗塞塔石碑” 231
10.8.3脚本中的正则表达式 232
10.8.4C++中的正则表达式 232
10.9不使用正则表达式的最佳做法 233
10.10本章小结 234
第11章 规范表示的问题 235
11.1规范的含义及其存在的问题 235
11.2规范文件名的问题 235
11.2.1绕过Napster名称过滤 235
11.2.2AppleMacOSX和Apache的漏洞 236
11.2.3DOS设备名漏洞 236
11.2.4Sun公司的StarOffice/tmp目录的符号链接漏洞 236
11.2.5常见的Windows规范文件名错误 237
11.3.1绕过AOL的父母控制 241
11.3.2绕过eEye的安全检查 241
11.3基于Web的规范问题 241
11.3.3安全区域和IE4的“无点IP地址”错误 242
11.3.4IIS4.0的∷$DATA漏洞 242
11.3.5何时一行变成了两行 244
11.3.6另一个Web问题——转义 244
11.4视觉等效攻击和同形异义词攻击 247
11.5预防规范化错误 247
11.5.1不要根据文件名进行决策 247
11.5.2使用正则表达式限制文件名的格式 248
11.5.3停止生成8.3格式的文件名 249
11.5.4不要相信PATH环境变量,要使用完整的路径名 249
11.5.5尝试规范化文件名 249
11.5.6安全地调用CreateFile 252
11.6基于Web的规范化问题的补救措施 253
11.6.1限制合法输入 253
11.6.2处理UTF-8字符时要谨慎 253
11.7最后的考虑:非基于文件的规范化问题 254
11.7.1服务器名 254
11.6.3ISAPI—岩石和硬地之间 254
11.7.2用户名 255
11.8本章小结 257
第12章 数据库输入问题 258
12.1问题 258
12.2伪补救措施1:用引号将输入括起来 260
12.3伪补救措施2:使用存储过程 260
12.4补救措施1:永不以sysadmin身份连接 261
12.5补救措施2:以安全的方式创建SQL语句 262
12.6纵深防御示例 263
12.7本章小结 266
第13章 Web特有的输入问题 267
13.1跨网站脚本:输出何时变坏了 267
13.2与XSS有关的其他攻击 270
13.2.1针对本地文件的XSS攻击 270
13.1.2攻击者不需要用户点击链接! 270
13.1.1有时攻击者不需要〈SCRIPT〉块 270
13.2.2针对HTML资源的XSS攻击 272
13.3XSS的补救措施 272
13.3.1将输出编码 272
13.3.2为所有的标签属性加上双引号 272
13.3.3将数据插入innerText属性 273
13.3.4强制使用代码页 273
13.3.5IE6.0SPI的cookie选项HttpOnly 274
13.3.6IE的“Web标记” 275
13.3.7IE的〈FRAMESECURITY〉属性 276
13.3.8ASP.NET1.1的ValidateRequest配置选项 276
13.4不要只是寻找不安全的结构 277
13.5我只是想让用户向我的Web站点发送HTML 278
13.7.2HTTP信任问题 279
13.7.1eval()可能是坏的 279
13.6如何审查代码中的XSS错误 279
13.7基于Web的其他安全主题 279
13.7.3ISAPI应用程序和过滤器 280
13.7.4警惕“可预知的Cookie” 282
13.7.5SSL/TLS客户端的问题 283
13.8本章小结 283
第14章 国际化问题 284
14.1I18N安全的黄金准则 284
14.2在应用程序中使用Unicode 284
14.3预防I18N缓冲区溢出 285
14.4验证I18N 286
14.4.1视觉验证 286
14.4.2不要使用LCMapString验证字符串 286
14.4.3使用CreateFile验证文件名 286
14.6调用MultiByteToWideChar时使用MB_PRECOMPOSED和MB_ERR_INVALID_CHARS 287
14.7调用WideCharToMultiByte时使用WC_NO_BEST_FIT_CHARS445 287
14.5字符集转换问题 287
14.8比较和排序 289
14.9Unicode字符属性 290
14.10规范化 291
14.11本章小结 291
第三部分 更安全的编码技术 294
第15章 Socket安全 294
15.1避免服务器被劫持 294
15.4接受连接 300
15.2TCP窗口攻击 300
15.3选择服务器接口 300
15.5编写防火墙友好的应用程序 304
15.5.1只用一个连接工作 305
15.5.2不要要求服务器连接回客户端 305
15.5.3使用基于连接的协议 305
15.6欺骗、基于主机和基于端口的信任 306
15.5.6让你的应用程序可配置 306
15.5.5不要在应用层数据中嵌入主机IP地址 306
15.5.4不要通过另外一个协议使你的应用程序进行多路复用 306
15.7IPv6即将到来 307
15.8本章小结 308
第16章 RPC、ActiveX控件和DCOM安全 309
16.1RPC入门 309
16.1.1什么是RPC 310
16.1.2创建RPC应用程序 310
16.1.3RPC应用程序的通信原理 311
16.2RPC安全最佳实践 312
16.2.1使用/robustMIDL开关参数 312
16.2.2使用[range]属性 313
16.2.3要求对连接进行验证 313
16.2.4使用数据包的保密性和完整性 317
16.2.5使用严格的上下文句柄 318
16.2.6不要依靠上下文句柄来进行访问检查 319
16.2.7注意空的上下文句柄 320
16.2.8不要信任你的对等端 321
16.2.9使用安全回调 321
16.2.10在单一进程中驻留多个RPC服务器 323
16.2.11使用主流的协议 324
16.3DCOM安全最佳实践 325
16.3.1DCOM基础 325
16.3.2应用层的安全 326
16.3.3DCOM用户上下文环境 326
16.3.4可编程实现的安全性 328
16.3.5源端和接收端 331
16.4ActiveX入门 331
16.5ActiveX安全最佳实践 331
16.5.1什么样的ActiveX组件是初始化安全和脚本安全的 332
16.5.2初始化安全和脚本安全的最佳实践 333
16.6本章小结 335
第17章 拒绝服务攻击的防范 336
17.1应用程序失败攻击 336
17.2CPU不足攻击 339
17.3内存不足攻击 344
17.4资源不足攻击 345
17.5网络带宽攻击 346
17.6本章小结 346
第18章 编写安全的.NET代码 348
18.1代码访问安全概述 349
18.2FxCop:“必备的”工具 350
18.3程序集是强命名的 351
18.4指定程序集权限需求 352
18.4.1请求最小的权限集 353
18.4.2拒绝不必要的权限 353
18.4.3请求可选的权限 353
18.5过分热衷于使用Assert方法 354
18.6关于Demand和Assert方法的进一步信息 355
18.7及时禁用断言 356
18.8请求和链接请求 357
18.9慎用SuppressUnmanagedCodeSecurityAttribute属性 358
18.10远程请求 359
18.11限制代码的使用范围 359
18.12不要在XML或配置文件中存储敏感数据 360
18.13审查允许部分信任的程序集 361
18.14检查非托管代码的托管包装的正确性 362
18.15委托的问题 362
18.16序列化的问题 362
18.17隔离存储的作用 363
18.18在部署ASP.NET应用程序之前禁用跟踪和调试 364
18.19不要远程发布冗长的错误信息 364
18.21失败时不要让攻击者知道太多 365
18.20对来源不可信的数据进行反序列化 365
18.22本章小结 366
第四部分 特殊的安全问题 368
第19章 安全性测试 368
19.1安全性测试人员的角色 368
19.2安全性测试与一般测试的区别 368
19.3根据威胁模型制定安全性测试计划 369
19.3.1分解应用程序 369
19.3.2确定组件接口 370
19.3.3按照潜在的漏洞对接口进行分级 371
19.3.4确定每一个接口使用的数据结构 371
19.3.5STRIDE类型的攻击程序 372
19.3.6用数据变种攻击应用程序 373
19.3.7测试之前 381
19.3.8开发查找缺陷的工具 381
19.4用欺诈性的服务程序测试客户软件 394
19.5用户是否应看到或修改数据 395
19.6用安全模板进行测试 395
19.7发现一个错误时测试并未结束 396
19.8测试码应有很高的质量 397
19.9测试端到端解决方案 397
19.10确定攻击面 397
19.10.1确定根攻击向量 398
19.10.2确定攻击向量的偏差 398
19.10.3统计产品中有偏差的攻击向量 398
19.11本章小结 399
第20章 审查安全代码 400
20.1处理大型应用程序 401
20.2多遍审查方法 401
20.3从易处着手 402
20.4整数溢出 403
20.5检查返回结果 405
20.7绝不要相信网络上的数据 406
20.6对指针代码进行额外的审查 406
20.8本章小结 407
第21章 安全的软件安装 408
21.1最小特权原则 408
21.2安装后立即清除密码 410
21.3使用安全配置编辑器 410
21.4低层的安全API 415
21.5使用WindowsInstaller 416
21.6本章小结 416
第22章 在应用程序中加入隐私策略 417
22.1对隐私的恶意侵犯和令人讨厌的侵犯 417
22.2主要的隐私立法 417
22.2.2关于数据保护的欧盟法令 418
22.2.3安全海港原则 418
22.2.1个人身份信息 418
22.2.4其他隐私立法 419
22.3隐私与安全 419
22.4建立隐私基础设施 420
22.4.1首席隐私官的作用 420
22.4.2隐私倡导者的作用 421
22.5设计尊重隐私的应用程序 421
22.5.1在开发过程中加入隐私策略 421
22.5.2了解隐私的特点 423
22.6本章小结 429
第23章 常用的好做法 430
23.1不要向攻击者透露任何信息 430
23.2关于服务的最佳做法 430
23.2.1安全、服务和交互式桌面 430
23.2.2服务帐户准则 431
23.7核心态错误 433
23.6让它保持关闭 433
23.7.1高级安全问题 433
23.4在补丁中改变错误信息时要谨慎 433
23.3不要以标志字符串的形式泄漏信息 433
23.5复查错误路径 433
23.7.2句柄 434
23.7.3符号链接 434
23.7.4配额 435
23.7.5序列化原语 435
23.7.6缓冲区处理问题 435
23.7.7IRP取消 436
23.8在代码中添加关于安全的注释 437
23.9借助于操作系统的功能 437
23.10不要依赖用户去做正确的选择 437
23.11安全地调用CreateProcess函数 438
23.11.2用引号把IpCommandLine中可执行文件的路径括起来 439
23.12不要创建共享的/可写的代码段 439
23.11.1不要将IpApplicationName设置为NULL 439
23.13正确使用模拟函数 440
23.14不要将用户文件写入\ProgramFiles目录 440
23.15不要把用户数据写入HKLM 440
23.16不要以“完全控制”权限打开对象 441
23.17对象创建错误 441
23.18慎用CreateFile 442
23.19安全地创建临时文件 443
23.20Setup程序和EFS文件系统的问题 445
23.21文件系统重解析点问题 445
23.22客户端安全是自相矛盾的说法 446
23.23范例就是模板 446
23.24以身作则,亲身体验 447
23.25你得向用户负责 447
23.26基于管理员SID确定访问权限 447
23.28慎用_alloca 448
23.27允许使用长口令 448
23.30不要嵌入公司的名称 449
23.29ATL转换宏 449
23.31将字符串移至资源DLL中 450
23.32应用程序日志 450
23.33从危险的C/C++迁移到托管代码 450
第24章 编写安全文档和错误消息 451
24.1文档中的安全问题 451
24.1.1关于文档的基础知识 451
24.1.2通过文档缓和威胁 452
24.1.3编写安全性文档的最佳做法 452
24.2错误消息中的安全问题 453
24.3典型的安全消息 454
24.4信息泄漏问题 454
24.4.1知情同意 455
24.4.3消息要具体 456
24.4.2累进泄漏 456
24.4.4最好不要提问 457
24.5对安全消息进行可用性测试 458
24.6审阅产品说明书时的注意事项 458
24.7安全设置的可用性 458
24.8本章小结 459
第五部分 附录 462
附录A 危险的API 462
附录B 安全误区 469
附录C 设计人员的安全措施核对清单 473
附录D 开发人员的安全措施核对清单 474
附录E 测试人员的安全措施核对清单 477
最后的一点思考 478
参考文献 479
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《代码少女 上》黑眼圈著 2019
- 《中国骨干旅游高职院校教材编写出版项目 中国饮食文化》邵万宽 2016
- 《现代艺术的源代码=THE SHORT STORY OF MODERN ART》(英)苏西·霍奇著 2020
- 《农产品检验检测机构质量体系文件编写指南》周兴梅编著 2018
- 《辅读学校《实用语文学本》之编写与实践研究》吴筱雅 2019
- 《HTML5,CSS3,JavaScript开发手册》孟庆昌,王津涛编著 2013
- 《家电维修完全掌握丛书 电磁炉维修技能完全掌握》孙立群编著 2012
- 《高等学校教材 C语言程序设计》刘达明,陈昌志,王宁等编著 2013
- 《质量监控与优化理论、算法及应用 基于计算智能视角》崔庆安著 2013
- 《SQL与关系数据库理论》(美)戴特(C.J.Date) 2019
- 《魔法销售台词》(美)埃尔默·惠勒著 2019
- 《看漫画学钢琴 技巧 3》高宁译;(日)川崎美雪 2019
- 《优势谈判 15周年经典版》(美)罗杰·道森 2018
- 《社会学与人类生活 社会问题解析 第11版》(美)James M. Henslin(詹姆斯·M. 汉斯林) 2019
- 《海明威书信集:1917-1961 下》(美)海明威(Ernest Hemingway)著;潘小松译 2019
- 《迁徙 默温自选诗集 上》(美)W.S.默温著;伽禾译 2020
- 《上帝的孤独者 下 托马斯·沃尔夫短篇小说集》(美)托马斯·沃尔夫著;刘积源译 2017
- 《巴黎永远没个完》(美)海明威著 2017
- 《剑桥国际英语写作教程 段落写作》(美)吉尔·辛格尔顿(Jill Shingleton)编著 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《高等教育双机械基础课程系列教材 高等学校教材 机械设计课程设计手册 第5版》吴宗泽,罗圣国,高志,李威 2018
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《中国十大出版家》王震,贺越明著 1991
- 《近代民营出版机构的英语函授教育 以“商务、中华、开明”函授学校为个案 1915年-1946年版》丁伟 2017
- 《新工业时代 世界级工业家张毓强和他的“新石头记”》秦朔 2019
- 《智能制造高技能人才培养规划丛书 ABB工业机器人虚拟仿真教程》(中国)工控帮教研组 2019
- 《AutoCAD机械设计实例精解 2019中文版》北京兆迪科技有限公司编著 2019